使用Git重用冲突解决方案

时间:2014-05-25 16:11:36

标签: git merge merge-conflict-resolution git-rerere

我可以告诉Git重用现有合并提交中的冲突解决方案吗?在提交时我被禁用了。新的合并提交在"我们的"上提供了一些额外的提交。合并的一面(但他们不应该引入新的冲突,因为他们修改了一组不同的文件)。


例如,请使用以下DAG:

m [master] Add new stuff
*
| o [old-master] Merge branch A (conflicts)
|/a [branch A]
n *
* *
*/
*

现在,我想要做的是将提交mm^带入分支old-master(以后再将其作为新主人)。我不想简单地将master合并到old-master,因为它会创建一个新的合并提交(尽管没有冲突)。我想以om作为父母重新创建提交a

新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)。

1 个答案:

答案 0 :(得分:9)

实施您所要求的最简单方法可能是追溯性地重新开始:

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