首页 > 解决方案 > Git rebase 冲突

问题描述

我正在重新设置一个分支。我想将所有提交压缩为一个。

git rebase -i --root

除了第一个提交之外的所有提交都设置为squash.

一路上,一些冲突突然出现,好像我在合并。为什么会这样?我认为 git 只是一个接一个地应用一个提交。

标签: git

解决方案


这就像合并,因为它正在合并。以示例的方式考虑:

A <- B <- C
      \
       \<-D

假设您要求在 C 之上重新定义 D。Git 会问自己 B 和 D 之间有什么区别:您必须对 B 做什么才能到达 D?然后它将这种差异“重播”到 C 上:也就是说,它尝试生成一个的提交,该提交对 B 执行相同的操作,但附加到 C。

好吧,取决于 C 对 B 做了什么,如何做到这一点可能并不明显。C 对 B 所做的更改可能会“妨碍”对 B 的更改。如果 C 将 B 中文件的第 1 行更改为“hello”,而 D 更改了 B 中“相同”文件的第 1 行“再见”,现在这个新的提交应该对 C 做什么?

如果你认为答案很明显——也就是说,如果你认为 B 或 D 在这方面是“正确的”——那么就解决冲突。冲突不是坏事!他们只是回答 git 担心它的答案可能违背你的意愿的问题。


推荐阅读