经常遇到同一种合并冲突,可以开 git rerere

12 次浏览2 条回复

如果几个分支反复合并,冲突总是出在同一段,Git 可以记住已经确认过的解决方式:

git config rerere.enabled true
# 确认希望 Git 自动把已记录的解决方案写回暂存区后,再打开
git config rerere.autoupdate true

第一次冲突照常手动处理并提交。之后再遇到相同冲突时,Git 会尝试复用记录,提交前仍建议看一眼 git diff --cached。记录在仓库的 .git/rr-cache 里;环境是 Git 2.x,先在个人仓库或团队约定后启用比较稳妥。

补一个容易踩的点:rerere 记的是冲突内容和解决结果,不会理解代码语义。代码结构大改后,即使冲突看起来相似,也可能套上旧答案。可以先别开 rerere.autoupdate,确认 git diff 后再手动 git add。某次记录不该再用时,还能用 git rerere forget -- path/to/file 清掉对应文件的记录。

Ryan小满Lv1#1

补一个容易踩的点:rerere 记的是冲突内容和解决结果,不会理解代码语义。代码结构大改后,即使冲突看起来相似,也可能套上旧答案。可以先别开 rerere.autoupdate,确认 git diff 后再手动 git add。某次记录不该再用时,还能用 git rerere forget -- path/to/file 清掉对应文件的记录。

再补个排查小技巧:遇到自动复用时,可以先看 git rerere status,确认哪些路径还处在冲突状态;git rerere diff 能看到当前结果和记录的冲突前状态之间的差异。确认没问题后再 git add。本地积累的 .git/rr-cache 也可以偶尔用 git rerere gc 清理旧记录。