使用Git重用冲突解决方案

kni*_*ttl 8 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 *
* *
*/
*
Run Code Online (Sandbox Code Playgroud)

现在,我想要做的是将提交mm^分支old-master(然后使其成为新的主).我不想简单地合并masterold-master,因为它会创建一个新的合并提交(尽管没有冲突).我想oma作为父母重新创建提交.

新的DAG应该如下所示:

  p [old-master] Merge branch A (same conflict resolution as old commit o)
 /|
m | [master] Add new stuff
* |
| a [branch A]
n *
* *
*/
*
Run Code Online (Sandbox Code Playgroud)

我不介意使用rerere,如果我之后可以告诉它记录现有合并commit(o)的解析.

jth*_*ill 10

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

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
Run Code Online (Sandbox Code Playgroud)

现在,rerere已经看到你对这些冲突做了什么,

git checkout -B old-master $o^1   # rewind `old-master` to before the merge
git merge master              # rerun it with current ancestry
Run Code Online (Sandbox Code Playgroud)