为什么我在自己的 merge request 中可以看到其他人的 commit

2019-07-18 11:39:36 +08:00
 Weixiao0725

我每次开发的时候用的 git 命令流程如下:

  1. git checkout master
  2. git fetch origin master
  3. git merge origin/master
  4. git checkout -b my_dev
  5. coding....
  6. git commit -am "finished feature"
  7. git push origin my_dev:my_dev

可是,这样做的话我居然可以在自己的 merge request 中看到别人的 commit。但是如果我改用git pull 来同步代码的话,然后再 coding,然后推到远端,就只会看到我自己的 commit。按照我的理解,git pull 不是等于 git fetch && git merge 吗,为什么会有这么大的区别呢?希望理解的老铁解答下,多谢,多谢!

ps:我们公司使用的 gitlab,在 GitHub 中应该叫 pull request 好像。

5040 次点击
所在节点    git
7 条回复
siteshen
2019-07-18 12:59:43 +08:00
执行 `git merge origin/master` 后,master 中的新代码就到你的分支了,你可以用 `git log` 在你的分支下看看 commit 历史来确认这一点( git difif origin/master 应该也能看到其他 commit 的代码)。

我用的方案是(注意,因为 rebase 会改变 commit 历史,所以只适用没有共享分支的情况):

git fetch
git checkout feature/impl-login
git rebase origin/master
# git push origin -f feature/impl-login # 警告⚠️请搞清楚 -f 的含义再使用

然后 `git log` 查看,就只有自己的 commit,冲突(如果有)在 rebase 过程中解决。
airect
2019-07-18 14:39:36 +08:00
因为目标分支未包含别人的 commit,而你的包含了😂
Weixiao0725
2019-07-18 15:08:42 +08:00
@airect 应该不是,因为我在 Changes 里只能看我的文件改变,看不到其他人的。
wuchujie
2019-07-18 16:45:33 +08:00
@siteshen 请叫一下
wuchujie
2019-07-18 16:49:58 +08:00
@siteshen 请教一下 比如我线上本身我线上分支是
线上 master 比如 commit 记录是 20190718

在此基础上 我在本地开新分支 feature-A 然后开发完[推测试服务器部署] push 到 git

线上 feature-A 的 commit 记录是 20190719

线上 master 现在有个修改 commit 记录是
20190720
20190718

现在 feature-A 还有办法 rebase 吗
siteshen
2019-07-18 19:34:58 +08:00
@wuchujie 只要没有未 commit 的代码,rebase 随时都可以执行的,过程如下:

git fetch # 保证本地有远端的 master 代码
git checkout feature-A
git rebase origin/master


rebase 成功后,`git log` 的结果应该是这样:

20190719
20190720
20190718


另外,建议对 git 不那么熟悉的同学,在测试时可以复制所有目录(和文件),在副本中测试。这样即使操作失败了,也不会有什么影响。另外一个建议是,遇到出现不太确定的情况时,尽早找熟悉 Git 的同事查看。
hantsy
2019-09-15 15:10:03 +08:00
个人只喜欢 Merge,不用 Rebase。

Merge 可以保留整个 Git 最原始的提交的树形结构。Rebase 将这种结构修改了,拉直了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/584069

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX