我不时偶然发现一个声明,'git rebase'比'git merge'导致更少的冲突,例如:Why does git rebase often have fewer merge conflicts than a merge?。这是否意味着可能会出现git-merge <BRANCH_A> <BRANCH_B>
失败的情况,我会做git reset --hard ORIG_HEAD
,然后执行git-rebase <BRANCH_B> <BRANCH_A>
它会成功吗?你能举个例子说明这种情况吗?
答案 0 :(得分:2)
想象一下这样的历史:
A-B-C-D-E “top-branch”
\
F-G-H
现在合并 E
到H
意味着:“取B‣H
的差异和B‣E
的差异,并找出如何合并他们。”
重新定位意味着:
B‣F
的差异和B‣E
的差异,并了解如何将它们合并到F’
F‣G
的差异和F‣F’
的差异,并了解如何将它们合并到G’
G‣H
的差异和G‣G’
的差异,并了解如何将它们合并到H’
因此,变基与将F
,G
和H
合并到top-branch
完全相同。
rebase方法将以更多步骤进行合并。这有利有弊。
H
实际上是F
还原时会发生什么。在我看来,rebase实际上是一个更糟糕的过程,虽然这可能是可能的,但我很难想象它实际上避免冲突的情况。看起来很有可能是您的冲突只是由F
中的单行更改引起的。当在G
中进一步更改该代码块时,您可能必须将所有这些更改解析为合并中的一个冲突,但您只需要在rebase中解决该单行更改。但这并不是真正的差别,因为冲突只会看起来更大,但应该同样容易解决。
答案 1 :(得分:0)
重新定位的一个优点是,您可以对总提交的一部分进行重新定位,稳定,提交解决方案,并且您现在拥有可以在以后恢复的原子进度单位。这可能不那么令人生畏。事实上你可以改变一些然后合并其余的。更灵活。