rerere 自动更新是什么
rerere(reuse recorded resolution)会记录冲突曾如何解决,下次同类冲突自动复用;rerere.autoUpdate=true 时连写入索引这一步也自动完成,文件直接进入已解决状态。git merge 与 git commit 都支持 --no-rerere-autoupdate 临时关闭,配合 git rerere forget 纠正错误记录。
基本信息
| 前置 | rerere.enabled=true 是整套机制的总开关 |
|---|---|
| 自动暂存 | rerere.autoUpdate=true 启用自动更新 |
| 临时关闭 | git merge --no-rerere-autoupdate 或 git commit 同名选项 |
| 纠错 | git rerere forget <路径> 清除该文件的记录 |
| 记录位置 | .git/rr-cache 目录,仅本地状态,不随推送同步 |
| 查看状态 | git rerere status 列出正在被跟踪的冲突路径 |
典型使用场景
- 长期分支反复合并同一上游:同类冲突多次出现,复用旧解法
- 大型变基演练:先把冲突解一遍,正式执行时自动套用
- 依赖升级分支:反复冲突,记录解决路径减少重复劳动
- 高风险合并反向使用:临时关闭自动更新,逐文件人工确认
- 团队演练:新人复现老冲突时借助既有记录快速对齐解决方式
常用示例
常用示例
git config rerere.enabled true # 总开关
git config rerere.autoUpdate true # 自动把解决结果写入索引
git merge upstream/main # 冲突时复用记录并自动暂存
git merge --no-rerere-autoupdate upstream/main # 本次临时关闭自动更新
git rerere forget src/app.js # 清掉误记录,下次回到手工何时关闭自动更新
| 场景 | 建议 | 原因 |
|---|---|---|
| 日常小合并 | 保持自动更新 | 省去重复的 add 动作 |
| 高风险发布合并 | 临时加 --no-rerere-autoupdate | 每个文件都要人工复核 |
| 发现误记录 | forget 后重解一次 | 错误会被反复复用 |
rr-cache 在 .git 目录里属于本地状态:不随 fetch 与 push 传播,队友机器上的记录互不影响,删掉即失去复用能力。
自动更新只是把记录写入索引,不代表解决一定正确;合并完成后仍应跑测试并用 diff 复核。当前跟踪的冲突路径可用 git rerere status 查看。