修复错误合并中覆盖的工作的建议

时间:2016-10-03 20:50:39

标签: git cherry-pick

考虑以下情况:

git配置有rerere.enabled 1,可以进行分辨率录制和重放。存在以下提交历史记录:

  B
 / \
A---C---E master 
 \   \ / 
  D   D'
  1. 提交B已在master--no-ff合并,以创建提交C

  2. 提交BD包含对文件Foo的冲突修改。

  3. 提交D已重新定位为C创建提交D' - 仅Foo中的更改错误地解决了D中的冲突。正确的解决方案包括BD的更改。

  4. 提交D'已合并到master中以创建提交E,并且由于提交Foo而导致的B更改已丢失而没有冲突。

  5. 后来的检查发现了这个错误。通过在git cherry-pick B上执行master来执行恢复尝试,目的是能够使用mergetool正确地手动解决冲突。然而,rerere开始并重播糟糕的分辨率。没有git rerere次调用似乎能够显示或清除错误的解决方案。

  6. 处理这种情况的最佳方法是什么?是不是git中的一个错误,樱桃选择没有重新覆盖(我在版本2.9.2)?感觉就像经常会出现的东西,但我找不到文档中解决的例子(我可能很难搜索)。

    请记住,这是一个非常简化的提交树。实际上,在几天之内,所显示的内容之间还有数十次提交 - 但发生的事情的实质如上所述。

1 个答案:

答案 0 :(得分:0)

这是我做的,但有更好的方法吗?

似乎与git merge --no-rerere-autoupdate的{​​{1}}无效。我能想到解决这个问题的最好方法是暂时应用git cherry-pick,这是有效的 - 然后我可以git config --local --add rerere.enabled 0没有自动解决方案,然后使用git cherry-pick B来解决冲突。这有点痛苦 - 特别是因为你必须记住之后撤消配置设置,但它确实具有在diff工具中显示正确的合并基础的优势。

我尝试的另一种方法是使用git mergetool(注意点)来获取索引中的更改,并使用git checkout B .在我的差异工具中编辑git difftool --cached。虽然这有效并且步骤较少,但它并没有为您提供合并基础,以便在差异中使用。