【问题标题】:Re-use conflict resolution with Git使用 Git 重用冲突解决方案
【发布时间】:2014-07-14 11:21:28
【问题描述】:

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


例如,采用以下 DAG:

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

【问题讨论】:

  • @jthill:我不认为另一个问题试图达到同样的目的。他们没有重新进行有冲突的合并,他们只是重新进行了后来的合并(并且没有冲突)。
  • 是的,但我想用一个新的提交 n' 替换 n,其中包括新的提交但具有相同的冲突解决方案(op 在我的 ASCII DAG 中)
  • 对不起,我因为误读了自己的代码而没有事先做好宣传而付出了代价。 Is it clearer now what's going on there? 但是如果 rerere 是一个选项,只需打开 rerere 并重做以前的分辨率显然会更好。

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


【解决方案1】:

实现您所要求的最简单的方法可能是追溯打开 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

【讨论】:

    猜你喜欢
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多