合并冲突变基

Merge conflicts rebase

所以我在我的本地分支中有几个提交都是关于功能 X 的。我重新设置了这些提交的基数,而没有从我的远程分支拉到一个提交中 - "Add feature X"。然后,当从我的远程分支中拉出时,我注意到重复提交。我已经压缩成一个的承诺现在又回来了。我想好吧,我将合并它们并将它们压缩到 "Add feature X" 提交中。合并很好。但是当我尝试变基时,我遇到了大量的合并冲突——大多数与我在创建 "Add feature X" 提交时已经解决的冲突相同。沮丧的是,我再次努力(使用 git rebase -i 并修复所有冲突)直到 rebase 完成。现在,当我从我的遥控器上拉出时,我预计不会发生任何事情,但令人惊讶的是,来自 rebase 的所有相同提交又回来了。

我不明白发生了什么。我能想到的是我需要用 git reset --hard commit-before-initial-rebase 后跟 git-pull 撤消变基,然后再次尝试变基。

我做错了什么,我该如何解决?

问题是您已将提交推送到远程分支,然后在本地分支上重写了历史记录。

在本地进行更改并将它们推送到远程分支后,您的本地和远程分支如下所示:

本地:

--o--o--a--b--c
     ^        ^
     master   branch

远程:

--o--o--a--b--c
     ^        ^
     master   branch

然后你变基并压缩本地分支上的所有提交,你的本地分支现在看起来像这样:

本地:

--o--o--d
     ^  ^
     m  branch

当您从远程分支拉取时,git 看到您有提交 d,并且远程分支有提交 abc,你告诉它你想在你的本地分支中进行所有这些提交,所以它这样做:

本地:

     ,--a--b--c--,
--o--o--d--------m
     ^           ^
     m           branch

其中 m 是合并提交。

没有魔法告诉 git 您不再需要提交 abc;它只知道本地和远程分支有不同的提交。

你应该做的是,在本地压缩所有提交之后,完成

git push -f

这会告诉 git 让远程分支看起来像您的本地分支,丢弃您在本地没有的远程分支上的任何更改。

如果其他人也在使用这个分支,你不应该这样做,但在你的工作流程中听起来并不是这样。