在完成对一个主题分支的工作后,我按以下方式将主题分支合并到主干:
o---*---o---o topic
/ \
o---o---o---*---o---o---+ master
带有 '*' 标记的提交修改了相同的代码,因此合并导致了合并冲突,并在合并提交中得到解决(标记为 '+')。
当我合并和解决冲突时,我的同事推送了新的提交到主分支(标记为 'n'),导致以下的历史记录:
o---*---o---o topic
/ \
o---o---o---*---o---o---+ master
\
n---n origin/master
现在,推送我的本地主分支会导致错误,因为它不是快进推送,所以我有两个选择:
- 放弃我的工作,将主分支重置为 origin/master 并重新合并。我想避免这样做,因为我必须再次解决冲突。
- 将主分支变基到 origin/master 并推送。这里出现了我的问题:即使使用 -p 开关进行变基,也无法顺利进行,合并提交显示相同的冲突,即使新的提交('n')没有改变由主题分支触及的任何内容。因此,在变基过程中我必须再次解决冲突,并且与选项1相同的结果。
o---*---o---o-------- topic
/ \
o---o---o---*---o---o---n---n---+ master & origin/master
编辑:
启用了rerere开关,但似乎没有任何帮助。除了将config.rerere设置为true之外,我还需要做些什么来解决我的问题吗?
编辑2:
将合并提交('+')到origin/master也可以解决问题(如评论和答案中提出的),但会导致一种丑陋的历史记录,我想通过仅有一个合并提交来避免这种情况。
rerere
(https://dev59.com/pV8e5IYBdhLWcg3whqk4#25671230)。 - jub0bsrerere
没有起作用吗?你尝试过使用变基(选项2)并且激活了rerere
,但出现了相同的合并冲突吗? - jub0bsrerere
的“已记录解决方案...”消息,所以似乎可以工作。但是当变基时,相同的冲突出现,并且rerere
不起作用(在调用git rerere remaining
时显示所有有冲突的文件)。 - rhabarbersaft