首页/开发/Git 与协作速查/rerere 自动更新与撤销
合并变基与冲突71 条

rerere 自动更新与撤销

rerere.autoUpdate=true 时自动把已记录的解决结果写入索引;也可用 rerere-autoupdate 选项临时控制,配合 rerere forget 纠错。

Git 与协作速查开发更新于 2026-10-13

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 查看。

易错点

  • 误记录持续放大:错误解法被记下后会不断复用,发现有问题要立即 forget 并重新解决一次,新记录才会覆盖旧的错误缓存
  • 把自动更新当免检:索引里的解决结果不等于正确结果,未经复核直接提交会把错误带进历史,高风险合并建议临时关闭逐文件确认
  • 共享目录误伤他人:.git 目录被多人共用时 forget 会影响他人复现,操作前确认缓存归属
  • 忘记总开关:只配 autoUpdate 而没开 rerere.enabled 时整套机制不工作

数据来源与参考

  • Git 官方文档:git-rerere(rerere.autoUpdate、--rerere-autoupdate)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌