问一个 Git 问题

2019-11-26 14:53:46 +08:00
 ryougifujino

用户 A 开发完一个 feature1 后打算合并到主分支然后 push 到远程。

git checkout master
git pull --rebase

这时候发现没有需要更新的内容。打算对 feature1 进行合并。

可就在用户 A 合并的这个过程中,用户 B 提交了一个 commit 并 push 到远程。

在这之后,用户 A 完成了 feature1 的合并。

然后发现 push 不上去。(因为就在合并的这个过程中,用户 B 提交了新东西到 origin/master )

于是用户 A 使用git pull --rebase打算更新后再 push。

但是发现这个时候合并的那次 commit 不见了。

好了,下面是问题:

1.为什么最后一次git pull --rebase的结果不会保留 Merge branch 'feature1'的那次提交呢?

(也就是这样)

2.难道这种情况下我只有 git pull 生成一个新节点(我不愿意看到的),还有什么其他好的方法解决这种情况吗?

注:请仅仅考虑这种工作方式的解决方案

2707 次点击
所在节点    git
12 条回复
woodensail
2019-11-26 15:05:46 +08:00
看你的结果,理论上应该是第一次的 merge 结果直接被废弃了。我怀疑是发现 push 不上去时,直接把本地 master reset 到了远端的 master。也就是第二张图的样子,然后再执行了一次 rebase 把 feature1 rebase 过来了
woodensail
2019-11-26 15:08:50 +08:00
其实本身 merge 一个分支后再去做 rebase 很容易冲突的,然后就是一锅粥。所以我发现 merge 后 push 失败,也是倾向于 reset 后重新 merge。而不是直接 rebase
ryougifujino
2019-11-26 15:27:38 +08:00
@woodensail #2 重新 reset 确实是一个方法,理论上来说 push 不上去就 reset,然后 pull 主分支再 merge feature,如果还是 push 不上去就再重复这一过程总会提上去。
woodensail
2019-11-26 15:34:45 +08:00
@ryougifujino 嗯,刚刚有个小项目偷懒,merge 之后发现有更新,然后做了 rebase,结果出现了和你一样的结果,merge 丢失……
很是神奇,不知道发生了什么……
LuckyBoyGirl
2019-11-26 15:39:07 +08:00
直接对比那次 commit 的代码,compare branch 然后再 push
maichael
2019-11-26 15:41:58 +08:00
这不就是因为 rebase 么。如果你要保留 merge 的 commit,用 rebase 干嘛。
jeffh
2019-11-26 16:10:42 +08:00
其实并没有丢失,只是变成游离态,没 branch 指针后界面就不显示了。原来 merge 提交的节点你可以 reflog 看下 commitId,然后在 checkout 到该 id 上,打上一个分支指针,这个时候就能看到了。
bertonzh
2019-11-26 16:16:25 +08:00
reset 到合并前,pull --rebase,merge,push
momocraft
2019-11-26 16:19:20 +08:00
pull 包括 rebase / merge 的时候过于“自动”。

我现在几乎不用 pull,每次 git merge && git rebase origin/SOME_BRANCH
momocraft
2019-11-26 16:19:35 +08:00
#9: 应为 git fetch && git rebase
jeffh
2019-11-26 16:31:47 +08:00
接#7,复现了楼主的场景,git reflog => git checkout => git branch the-merged-branch 之后如图,merge 节点还是在的。
发布了图,图片地址 base64: aHR0cHM6Ly9pLmxvbGkubmV0LzIwMTkvMTEvMjYvVldHaTZrM1h2c0FJQlJ4LnBuZw==
SoloCompany
2019-11-29 02:46:43 +08:00
希望保留 merge commit 应该使用 git rebase -m

并且不能使用 -i

RTFM

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

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

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

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

© 2021 V2EX