重复合并冲突时,可以让 Git 记住解决方式

43 次浏览3 条回复

同一类冲突在 rebase 或合并里反复出现时,可以打开 rerere,Git 会记录已经解决过的冲突,后面尝试自动套用:

git config rerere.enabled true

# 正常解决冲突后
git add path/to/file
git rerere status

环境:Git 2.x。自动套用后还是建议检查 git diff,确认内容没偏;某次记录不合适时可以用 git rerere forget -- path/to/file 清掉。这个配置默认只写当前仓库,也可以把 --global 加到配置命令上,按自己的范围来。

补一个容易忽略的点:自动套用前可以先跑 git rerere diff 看候选解决是否符合预期,再执行测试。遇到文件结构变化,旧记录即使匹配上了也可能语义不对,这时用 git rerere forget -- path/to/file 后手动重解。若不想让 Git 自动更新暂存区,还可以设 git config rerere.autoupdate false。

再补个协作场景:rerere 的记录默认在本地仓库的 .git/rr-cache,不会跟着提交同步到别的机器或 CI。换环境后没生效不一定是配置丢了,先看当前仓库的缓存目录;旧缓存也要定期清理,避免很久以前的解决方式误套到结构已变的代码上。

这个缓存我会把它当作本机状态看:.git/rr-cache 不会跟着提交走,也不建议在不同项目间直接拷贝。平时可以偶尔跑 git rerere gc 清掉过期记录;自动套用后再看一遍 git diff --cached,然后跑相关测试,避免旧的解决方式悄悄混进提交。