11

我可以告诉 Git 重新使用现有合并提交中的冲突解决方案吗?我在提交时已重新禁用。新的合并提交在合并的“我们”一侧包含一些额外的提交(但它们不应该引入新的冲突,因为它们修改了一组不同的文件)。


例如,采用以下 DAG:

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

现在,我想做的是将提交带入分支(m然后将其设置为新的主控)。我不想简单地合并到,因为它会创建一个新的合并提交(尽管没有冲突)。我想与父母一起重新创建承诺。m^old-mastermasterold-masteroma

新的 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) 的分辨率。

4

1 回答 1

15

实现您所要求的最简单的方法可能是追溯打开 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
于 2014-05-26T00:56:43.167 回答