因此,我在本地分支中有几个有关功能X的提交。我重新构建了这些提交的基础,而没有从远程分支中提取一个提交-“添加功能X”。然后,当从我的远程分支中拉出时,我注意到重复的提交。现在我回来了,我已经被压成一团的承诺了。我以为可以,我将它们合并并压入“添加功能X”提交中。合并很好。但是,当我尝试进行基础调整时,我遇到了很多合并冲突-与创建“添加功能X”提交时已经解决的大多数冲突相同。沮丧之余,我再次进行了遍历(使用git rebase -i
并解决了所有冲突),直到完成变基。现在,当我从遥控器上撤出时,我预计什么都不会发生,但是令人惊讶的是,来自重新部署的所有相同提交都又回来了。
我不明白发生了什么。我能想到的就是我需要先撤消git reset --hard commit-before-initial-rebase
,再撤消git-pull
的重新设置,然后再次尝试重新设置。
我做错了什么,该如何解决?
答案 0 :(得分:2)
问题是您已将提交推送到远程分支,然后在本地分支上重写了历史记录。
在本地进行更改并将其推送到远程分支之后,本地和远程分支将如下所示:
本地:
--o--o--a--b--c
^ ^
master branch
远程
--o--o--a--b--c
^ ^
master branch
因此,您在本地分支上重新整理并压缩了所有提交,现在本地分支如下所示:
本地:
--o--o--d
^ ^
m branch
当您从远程分支中拉出时,git会发现您已提交d
,并且远程分支中有提交a
,b
和c
,并且您告诉它您要在本地分支中进行所有这些提交,因此执行以下操作:
本地:
,--a--b--c--,
--o--o--d--------m
^ ^
m branch
m
是合并提交。
没有任何魔术可以告诉git您不再需要提交a
,b
和c
;它所知道的只是本地和远程分支具有不同的提交。
您应该做的是在本地压缩所有提交后完成
git push -f
这将告诉git使远程分支看起来像您的本地分支,丢弃您在本地没有的远程分支上的所有更改。
如果其他人也正在使用此分支,则不应执行此操作,但这听起来好像不是工作流中的情况。