Qué hace rerere
Rerere — "reuse recorded resolution" — observa cómo resuelves un conflicto de merge, registra la resolución, y la reproduce la próxima vez que el mismo conflicto aparezca. Es invaluable en ramas de larga vida que repetidamente hacen rebase o merge contra un main activo.
Habilitación
git config --global rerere.enabled true
git config --global rerere.autoupdate true
Cómo funciona
Cuando ocurre un conflicto, Git almacena un hash del contexto del conflicto bajo .git/rr-cache/. Tras resolver y hacer commit, la resolución se asocia con ese hash. Futuros merges que produzcan el mismo contexto reciben la resolución registrada automáticamente.
Inspeccionar estado
git rerere status
git rerere diff
git rerere remaining
Olvidar una mala resolución
git rerere forget path/to/file
Caso de uso: tormentas de rebase
Mantienes una rama de feature larga y haces rebase contra main semanalmente. Los mismos conflictos en CHANGELOG.md aparecen cada vez. Sin rerere los re-resuelves; con rerere, la primera resolución manual se reproduce el resto del rebase.
Caso de uso: rama de integración
Algunos equipos mantienen una rama de "integración" que re-fusiona todas las ramas de feature cada noche para detectar conflictos pronto. Rerere hace casi automáticos esos merges nocturnos.
Errores comunes
Confiar ciegamente en rerere: siempre inspecciona con git diff --staged antes de hacer commit. Rerere coincide por contexto, no por intención semántica.
Entrenar rerere desde la historia
git rev-list --merges main | while read merge; do
git checkout "$merge^"
git merge "$merge^2" || git rerere
git reset --hard
done