启用git rerere是否有任何弊端?


107

我已经阅读了有关git的rerere功能的各种内容,并且正在考虑启用它。但是我还没有看到有人提到使用它时可能会出现的任何问题。我必须假设有一个缺点,或者默认情况下可能会启用它。那么启用rerere是否有任何弊端?它会导致哪些其他潜在问题呢?


自动rerere启用,并将其应用于先前的分辨率,它显示一条消息?如果是这样,它是什么样的?TIA!
joeytwiddle

1
@joeytwiddle,根据本文,其格式为Resolved 'index.html' using previous resolution.
sampablokuper

Answers:


69

如果您不正确地执行了合并,则将其丢弃,然后再次执行“相同”合并,那么它将再次不正确。但是,您可以忘记录制的分辨率。从文档中

git rerere forget <pathspec>

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

注意在特定路径上使用它;您不想在任何地方都丢掉所有录制的分辨率。(forget不建议使用不带参数的方法,以免您执行此操作,除非您键入git rerere forget .明确要求它。)

但是,如果您不打算这样做,则很容易最终将不正确的合并放入您的历史记录中。


13
这就是为什么rerere仍然将冲突标记为未合并的文件保留下来的原因,因此您必须在提交之前手动添加它们(希望在检查/测试它们之后)。您始终可以git checkout -m <path>根据需要签出原始冲突版本并重做分辨率。
卡斯卡贝尔2011年

1
那是有道理的!听起来您需要新的别名。
卡斯卡贝尔2011年

5
我认为这可能是主要问题。启用rerere可以为错误意外进入提供另一种方法。您中止的合并(或者通过从历史记录中删除将其撤消)仍然可以在以后再次困扰您。基本上,它引入了第二个历史机制,该机制与实际历史图正交。
瑞安·汤普森

3
@RyanThompson中止的合并不会影响rerere。(我经常希望他们这样做-我有时会中止合并,因为我将合并设置错误,然后在正确设置时需要执行完全相同的分辨率。)至于从历史记录中删除合并,为什么您要去做?
Marnen Laibow-Koser 2014年

40

正如哈马诺(JC Hamano)在他的文章“ 娱乐与娱乐 ”中提到的那样

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

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

因此,如果您rerere在过于广泛的内容上进行激活,由于最后一点,您可能会以令人惊讶或令人困惑的合并分辨率而告终。


15
冲突的大块头仍然必须匹配;给出误报是相当困难的。
卡斯卡贝尔2011年


3

我樱桃选择了一个提交(在gitk中),该提交仅包含一个二进制文件。Cherrypick由于冲突而失败(这很自然),我解决了冲突,保留了Cherry Pick。后来我很惊讶地在另一个重新建立了基础的分支中发现我的dll不起作用-只是发现它们没有作为(我推测)自动冲突解决方案带入到了基础中。因此,这是我遇到(不得不重新启用)遇到违反直觉(尽管我确信完全一致)行为的唯一情况。


1
治愈:git rerere forget path/to/compiled/bin.dll
Mr_and_Mrs_D 2015年

在最初的情况下,我得到的冲突不是基于采摘而是基于重新定标,但我认为这没有什么不同
Mr_and_Mrs_D 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.