git rebase -i (Interactiv) în Git

Curățarea, reordonarea, editarea și comasarea (squash) commit-urilor înainte de a trimite un Pull Request curat.

Sintaxă comandă
git rebase -i HEAD~<n>

În timpul dezvoltării unei funcționalități, istoricul de commit-uri devine adesea haotic, conținând mesaje triviale de tipul ‘wip’, ‘mic fix’, ‘test din nou’ sau ‘am uitat un punct și virgulă’. Trimiterea acestui istoric murdar în producție poluează jurnalul de audit al echipei.

Comanda git rebase -i (Interactive Rebase) deschide o listă interactivă a ultimelor `n` commit-uri într-un editor de text, permițându-ți să dictezi precis destinul fiecăruia: poți comasa 5 commit-uri mici într-unul singur curat (`squash`), poți schimba mesajul unui commit (`reword`) sau poți șterge un commit accidental (`drop`).

Această practică este standardul de aur în companiile profesionale înainte de deschiderea unui Pull Request, asigurând un istoric liniar și ușor de inspectat pe termen lung.

Sintaxă, opțiuni și concepte cheie

Opțiune / Concept Descriere practică
pick Păstrează commit-ul așa cum este în istoric.
squash Unește modificările acestui commit cu cel anterior și deschide editorul pentru un mesaj comun.
fixup Unește modificările cu commit-ul anterior, dar aruncă complet mesajul redundant.
reword Păstrează modificările de cod, dar permite reformularea mesajului de commit.
drop Șterge complet commit-ul din istoricul ramurii.

Exemple practice și cod

Exemplul 1: Comasarea a 3 commit-uri într-unul singur curat înainte de Pull Request

Cum se curăță istoricul folosind directiva `squash`.

# Deschidem ultimele 3 commit-uri în mod interactiv:
$ git rebase -i HEAD~3

# În editorul ce se deschide automat:
pick 1a2b3c4 Adaugă endpoint de autentificare JWT
squash 2b3c4d5 Mic fix la parsarea tokenului
squash 3c4d5e6 Adaugă teste unitare

# Salvăm fișierul. Git comasează totul într-un singur commit curat:
[detached HEAD 8f9e0a1] Feature: Autentificare JWT cu suita completă de teste unitare
 3 files changed, 140 insertions(+)

Rezultat & Impact

Istoricul de git devine impecabil și gata de aprobare la code review.

Greșeli frecvente și bune practici

  • Rularea `git rebase -i` pe o ramură publică partajată (cum ar fi `main` sau `master`), ceea ce rescrie istoricul și creează divergențe grave pentru colegii de echipă.
  • Ștergerea din greșeală a unei linii din fișierul de rebase, ceea ce duce la abandonarea (drop) definitivă a acelui commit.

Ghiduri și noțiuni înrudite