120
4

4 回答 4

78

如果您不正确地进行合并,然后将其丢弃,然后再次进行“相同”合并,它将再次不正确。不过,您可以忘记记录的分辨率。从文档中

git rerere forget <pathspec>

这将重置 rerere 为当前冲突记录的冲突解决方案<pathspec>

小心在特定路径上使用它;您不想到处吹走所有记录的分辨率。(不推荐使用不forget带参数以使您免于执行此操作,除非您键入显式请求它。)git rerere forget .

但是,如果您不考虑这样做,您很容易最终将错误的合并放入您的历史记录中。

于 2011-04-02T05:59:08.297 回答
46

正如 JC Hamano 在他的文章“ Fun with rerere ”中提到的那样

  • Rerere 记得您选择如何解决冲突区域;
  • Rerere 还记得你是如何在冲突区域之外进行润色以适应语义变化的;
  • Rerere 可以重用以前的解决方案,即使您合并的两个分支的内容与您之前解决的分支不同

即使是长期使用 rerere 的人,也常常没有注意到最后一点。

因此,如果您激活rerere的内容过于广泛,您可能会因为最后一点而得到令人惊讶或令人困惑的合并分辨率。

于 2011-04-01T22:51:44.623 回答
5

我已经在全球范围内启用了 rerere。我真的没有注意到任何问题,而且它通常似乎让我的生活更轻松。

于 2012-07-27T16:32:25.047 回答
3

我挑选了一个只包含二进制文件的提交(在 gitk 中)。Cherrypick 由于冲突而失败(想到这是很自然的),我解决了保留樱桃采摘的冲突。后来我惊讶地发现我的 dll 没有表现在另一个rebase 分支中 - 只是发现它们没有被带入 rebase 作为(我推测)自动冲突解决。所以这是我遇到的唯一一个遇到违反直觉(尽管我确信完全一致)行为的案例(启用了 rerere)。

于 2015-05-31T04:04:03.547 回答