合并冲突变基

时间:2019-12-30 11:22:35

标签: git github rebase

因此,我在本地分支中有几个有关功能X的提交。我重新构建了这些提交的基础,而没有从远程分支中提取一个提交-“添加功能X”。然后,当从我的远程分支中拉出时,我注意到重复的提交。现在我回来了,我已经被压成一团的承诺了。我以为可以,我将它们合并并压入“添加功能X”提交中。合并很好。但是,当我尝试进行基础调整时,我遇到了很多合并冲突-与创建“添加功能X”提交时已经解决的大多数冲突相同。沮丧之余,我再次进行了遍历(使用git rebase -i并解决了所有冲突),直到完成变基。现在,当我从遥控器上撤出时,我预计什么都不会发生,但是令人惊讶的是,来自重新部署的所有相同提交都又回来了。

我不明白发生了什么。我能想到的就是我需要先撤消git reset --hard commit-before-initial-rebase,再撤消git-pull的重新设置,然后再次尝试重新设置。

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

1 个答案:

答案 0 :(得分:2)

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

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

本地:

--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使远程分支看起来像您的本地分支,丢弃您在本地没有的远程分支上的所有更改。

如果其他人也正在使用此分支,则不应执行此操作,但这听起来好像不是工作流中的情况。