合并冲突变基
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
,并且远程分支有提交 a
、b
和 c
,你告诉它你想在你的本地分支中进行所有这些提交,所以它这样做:
本地:
,--a--b--c--,
--o--o--d--------m
^ ^
m branch
其中 m
是合并提交。
没有魔法告诉 git 您不再需要提交 a
、b
和 c
;它只知道本地和远程分支有不同的提交。
你应该做的是,在本地压缩所有提交之后,完成
git push -f
这会告诉 git 让远程分支看起来像您的本地分支,丢弃您在本地没有的远程分支上的任何更改。
如果其他人也在使用这个分支,你不应该这样做,但在你的工作流程中听起来并不是这样。
所以我在我的本地分支中有几个提交都是关于功能 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
,并且远程分支有提交 a
、b
和 c
,你告诉它你想在你的本地分支中进行所有这些提交,所以它这样做:
本地:
,--a--b--c--,
--o--o--d--------m
^ ^
m branch
其中 m
是合并提交。
没有魔法告诉 git 您不再需要提交 a
、b
和 c
;它只知道本地和远程分支有不同的提交。
你应该做的是,在本地压缩所有提交之后,完成
git push -f
这会告诉 git 让远程分支看起来像您的本地分支,丢弃您在本地没有的远程分支上的任何更改。
如果其他人也在使用这个分支,你不应该这样做,但在你的工作流程中听起来并不是这样。