Una dintre cele mai frustrante experiențe în Git apare atunci când lucrați pe o ramură de feature de lungă durată și trebuie să faceți periodic git rebase main sau teste de integrare: de fiecare dată când dați rebase, vă loviți de exact aceleași conflicte de merge pe care le-ați rezolvat manual cu o zi înainte! Mecanismul git rerere (Reuse Recorded Resolution) rezolvă definitiv această problemă.
1. Activarea mecanismului rerere
# Activăm rerere la nivel global pentru toate depozitele de pe mașina locală:
git config --global rerere.enabled true
# Opțional: forțează adăugarea automată a fișierelor rezolvate în staging (index):
git config --global rerere.autoupdate true
Cum funcționează rerere în culise?
- În momentul în care apare un conflict de merge sau rebase,
rereresalvează o amprentă (pre-image) a fișierului în folderul ascuns.git/rr-cache/. - Dezvoltatorul rezolvă manual conflictul în editorul de cod și salvează fișierul.
- Când comiteți rezolvarea (
git commit),rerereînregistrează starea finală (post-image). - Data viitoare când Git întâlnește același conflict pe acel fișier (la un viitor rebase sau merge pe alt branch), rerere detectează potrivirea și aplică automat rezolvarea ta precedentă, afișând mesajul: „Resolved ‘fisier.php’ using previous resolution”!
Comenzi de diagnostic pentru rerere
# Listează fișierele ale căror conflicte au fost rezolvate automat în operațiunea curentă:
git rerere status
# Afișează diferențele dintre starea inițială conflictuală și rezolvarea aplicată:
git rerere diff
# Șterge rezolvarea memorată pentru un fișier (dacă vrei să o reiei de la zero):
git rerere forget calea/catre/fisier.php