我已经阅读了关于git的rerere功能的各种内容,我正在考虑启用它。但我没有看到有人提到使用它时可能出现的任何问题。我必须假设有一个缺点,或者它可能默认启用。那么启用rerere有什么缺点吗?哪些潜在的问题会导致不会发生?
答案 0 :(得分:58)
如果你做错合并,然后丢弃它,然后再次进行“相同”合并,它将再次出错。但是,您可以忘记记录的分辨率。来自the documentation:
git rerere forget <pathspec>
这会重新解决rerere为
<pathspec>
中当前冲突记录的冲突解决方案。
小心在特定路径上使用它;你不想在任何地方吹走所有录制的分辨率。 (forget
没有参数deprecated可以帮助您避免这样做,除非您输入git rerere forget .
来明确请求它。)
但如果你不这样做,你很容易就会把错误的合并放到你的历史中。
答案 1 :(得分:35)
正如J. C. Hamano在他的文章“Fun with rerere”中提到的那样
- Rerere记得您选择如何解决冲突地区;
- Rerere还记得你是如何在冲突地区之外进行调整以适应语义变化的;
- Rerere可以重复使用以前的分辨率,即使您合并了两个分支,其内容与您之前解析的分支不同。
即使长期使用rerere的人也常常没有注意到最后一点。
因此,如果您在内容过于宽泛的情况下激活rerere
,则由于最后一点,您最终可能会出现令人惊讶或令人困惑的合并解决方案。
答案 2 :(得分:3)
我选择了一个只包含二进制文件的提交(在gitk中)。 Cherrypick由于冲突而失败了(事情就这么自然而然),我解决了保留樱桃挑选的冲突。后来我很惊讶地发现另一个重新分支我的dll没有表现出来 - 只是发现他们没有被带入rebase,因为(我推测)自动解决冲突。因此,这是我遇到的唯一一种情况(启用了rerere),遇到违反直觉的行为(虽然我确信这种行为完全一致)。
答案 3 :(得分:2)
我已全局启用了rerere。我真的没有注意到任何问题,它通常似乎让我的生活更轻松。