2011-04-01 115 views
77

我读过关于git的rerere功能的各种东西,我正在考虑启用它。但是我还没有看到任何人提到使用它时可能出现的任何可能的问题。我必须假定有一个缺点,或者它可能会默认启用。那么启用rerere有什么不足吗?它会导致什么潜在的问题不会发生?启用git rerere有什么缺点吗?

+0

当启用[automatic rerere](http://chuva-inc.com/blog/2012/09/fast-tip-enable-git-rerere-right-now)并应用以前的分辨率时,是否显示一条消息?如果是这样,它是什么样子? TIA! – joeytwiddle 2014-06-19 01:27:29

回答

49

如果你不正确地进行了合并,然后丢弃它,那么再次进行“相同”合并,它会再次不正确。不过,您可以忘记录制的分辨率。从the documentation

git rerere forget <pathspec>

这将重置其rerere记录了在<pathspec>目前冲突的冲突解决。

小心在特定路径上使用它;你不想在任何地方吹走所有录制的分辨率。 (forget不带参数已经deprecated救你脱离这样做,除非你键入git rerere forget .明确提出要求。)

但是,如果你不觉得这样做,你可以很容易地结束了把不正确的合并成你的历史..

+12

这就是为什么'rerere'仍然会将冲突标记为未合并的文件,因此您必须在提交之前手动添加它们(希望在检查/测试它们之后)。您可以随时使用'git checkout -m '查看原始冲突版本,并在必要时重做分辨率。 – Cascabel 2011-04-02 06:15:26

+4

我仍然认为这个命令应该是'git forere'。 – MatrixFrog 2011-04-02 06:18:10

+1

这是有道理的!听起来你需要一个新的别名。 – Cascabel 2011-04-02 07:01:07

31

正如J. C.滨野提到在他的文章 “Fun with rerere

  • Rerere记住你如何选择解决冲突的区域;
  • Rerere还记得你是如何触及冲突地区以外的地方以适应语义变化的;
  • 即使您合并了两个不同于先前解决的内容的分支,但Rerere仍可以重新使用先前的分辨率

即使长期使用rerere很长一段时间的人往往没有注意到最后一点。

所以,如果你过于宽泛内容激活rerere,你可能会以惊人的或混乱的合并决议结束,因为最后一点了。

+10

相互冲突的豪克仍然必须匹配;它很难给出一个误报。 – Cascabel 2011-04-01 23:13:23

1

我有rerere全球启用。我真的没有注意到任何问题,而且通常似乎让我的生活更轻松。

+3

同样在这里。 2年以上使用没有问题。 – 2012-09-14 11:09:35

1

我樱桃挑选了一个只包含二进制文件的提交(在gitk中)。 Cherrypick由于冲突而失败(这是一件很自然的事情),我解决了冲突,保持了樱桃选择。我后来惊奇地发现另一个重组的分支,我的dll没有表现 - 只是发现他们没有被带入rebase(我猜测)自动冲突解决。所以这是我碰到的唯一情况(有可能是完全一致的)的行为。

+0

治愈:'git rerere忘记路径/ to/compiled/bin.dll' – 2015-05-31 04:11:24

+0

在最初的情况下,我得到的冲突不是在樱桃采摘,但在rebasing,但我不认为这有所作为 – 2015-05-31 15:42:25