Git中的重复使用冲突解决

15

我能否告诉Git重用现有合并提交的冲突解决方案?当时我没有启用rerere。新的合并提交包含一些关于合并“我们”方面的额外提交(但它们不应该引入新的冲突,因为它们修改了另一组文件)。


例如,考虑以下有向无环图:

m [master] Add new stuff
*
| o [old-master] Merge branch A (conflicts)
|/a [branch A]
n *
* *
*/
*
现在,我想要将提交 mm^ 加入分支 old-master (后续将使其成为新的主分支)。我不想简单地将 master 分支合并到 old-master 分支中,因为这将创建一个新的合并提交(尽管没有冲突)。我想用 ma 作为父提交重新创建提交 o
新的有向无环图 (DAG) 应该如下所示:
  p [old-master] Merge branch A (same conflict resolution as old commit o)
 /|
m | [master] Add new stuff
* |
| a [branch A]
n *
* *
*/
*

如果我可以告诉rerere记录现有合并提交(o)的解决方法,我不介意使用rerere。


@jthill:我认为另一个问题并不尝试达到同样的目的。他们没有重新执行带有冲突的合并,而只是重新执行后来进行的合并(并且没有冲突)。 - knittl
是的,但我想用一个新的提交n'来替换n,其中包括新的提交,但具有相同的冲突解决(在我的ASCII DAG中为op)。 - knittl
很抱歉出现了这种情况,我因为没有正确阅读自己的代码而付出了不好的开端的代价。现在你明白那里发生了什么了吗? 但是,如果rerere是一个选项,只需打开rerere并重新执行先前的解析显然更好。 - jthill
1个回答

17

实现您所要求的最简单的方法可能是在后期重新启用rerere:

git config rerere.enabled true    # with rerere turned on,

git checkout $o^1             # rerun the original merge
git merge $o^2
git read-tree --reset -u $o:  # resolve conflicts exactly as before

git commit                    # throwaway commit to feed the results to rerere

现在rerere已经看到了你如何处理这些冲突,

git checkout -B old-master $o^1   # rewind `old-master` to before the merge
git merge master              # rerun it with current ancestry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接