没有冲突的合并是否等同于没有冲突的变基?

Is merge without conflicts equivalent to rebase without conflicts?

当且仅当对应的 git rebase 成功且无冲突时,git merge 将成功且无冲突是否正确?

不,事实上有一个简单的案例,合并工作正常但 rebase 不工作:

...--o--A   <-- mainline
      \
       B--C--!C   <-- branch

其中 C 是与 A 冲突的提交,而 !C 是其还原。将 branch 合并回 mainline 在源代码树效果上等同于将提交 B 合并回主线,而变基复制两个 C (与 A 冲突) 然后 !C (在解析时,也与 A 冲突)。

当然,在这种情况下,您可以交互地变基并简单地删除 C!C,但在更复杂的链中,您可以看到提交可能如何与 [=12= 冲突] 但随后的提交可能会有效地解决该冲突 "in advance",因此将分支的尖端合并回主线不会发生冲突。