Git rebase冲突

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git rebase冲突相关的知识,希望对你有一定的参考价值。

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

git rebase -i --root

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

一路走来,有些冲突突然冒出,好像我正在合并。为什么会发生?我以为git只会在一个提交之后再应用一个提交。

答案

这就像合并,因为它合并。通过示例考虑:

A <- B <- C
      
       <-D

假设您要求将D置于C的基础上。Git会问自己,B和D之间的差异是什么:为了到达D,您必须对B做什么?然后,它将“差异”重播到C上:即,它尝试生成一个new提交,该提交对B执行相同的操作,但附加到C。

嗯,取决于C对B所做的操作,如何做到这一点可能并不明显。 C对B所做的更改可以是“对B进行更改的方式”。如果C将B中文件的第1行更改为“ hello”,而D将B中文件的“第1行”更改为B到“再见”,现在该新提交相对于C应该做什么?

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

另一答案

到目前为止,最简单的方法是:

git merge base-branch # merge your base branch
git reset--soft base-branch # move branch pointer, do not change files
# at this point, all differences between base branch and your branch are on index
# ready to be committed
git commit -m "my squashed feature"

您已经完成。

以上是关于Git rebase冲突的主要内容,如果未能解决你的问题,请参考以下文章

为啥 git rebase 的合并冲突通常比合并少?

git rebase

git rebase 的常见冲突及解决办法

git rebase之abort,continue,skip

找回git rebase --skip消失的代码

git 提交冲突怎么办