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)
现在,我想要做的是将提交m和m^分支old-master(然后使其成为新的主).我不想简单地合并master到old-master,因为它会创建一个新的合并提交(尽管没有冲突).我想o用m和a作为父母重新创建提交.
新的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)