Cosa fa rerere
Rerere — "reuse recorded resolution" — osserva la risoluzione di un conflitto di merge, la registra e la riproduce la volta successiva che lo stesso conflitto compare. E prezioso su branch di lunga durata che fanno rebase o merge ripetuti contro un main attivo.
Abilitare
git config --global rerere.enabled true
git config --global rerere.autoupdate true
Come funziona
Quando si verifica un conflitto, Git memorizza un hash del contesto del conflitto in .git/rr-cache/. Dopo la risoluzione e il commit, la risoluzione viene associata a quell'hash.
Ispezionare lo stato
git rerere status
git rerere diff
git rerere remaining
Dimenticare una risoluzione errata
git rerere forget path/to/file
Caso d'uso: tempeste di rebase
Si mantiene un branch di feature lungo e si fa rebase contro main settimanalmente. Gli stessi conflitti in CHANGELOG.md appaiono ogni volta. Senza rerere si risolvono di nuovo; con rerere, la prima risoluzione manuale viene riprodotta per il resto del rebase.
Caso d'uso: branch di integrazione
Alcuni team mantengono un branch "integration" che fa re-merge di tutti i branch di feature di notte per rilevare conflitti precocemente.
Errori comuni
Fidarsi ciecamente di rerere: ispezionare sempre con git diff --staged prima di committare, specialmente con autoupdate attivo.
Addestrare rerere dalla storia
git rev-list --merges main | while read merge; do
git checkout "$merge^"
git merge "$merge^2" || git rerere
git reset --hard
done