git rebase în Git

Reaplică commit-urile din ramura curentă peste o altă ramură, creând un istoric perfect liniar.

Sintaxă comandă
git rebase [opțiuni] nouă_bază

Ce face git rebase

În timp ce git merge păstrează istoricul ramificat creând un commit de îmbinare, git rebase ia commit-urile tale, le desprinde temporar și le ‘lipește’ la capătul noii ramuri, de parcă ai fi început să scrii codul chiar pe cea mai recentă versiune.

Cu modul interactiv (git rebase -i), devine cel mai puternic editor de istoric: permite reordonarea, comasarea (squash), editarea mesajelor sau ștergerea commit-urilor înainte de a le face publice.

Opțiuni și argumente

Opțiune / Parametru Descriere
-i, --interactive Lansează editorul interactiv pentru a edita, combina (squash) sau reordona commit-urile.
--abort Anulează complet rebase-ul și readuce ramura în starea inițială dacă apar probleme.
--continue Continuă procesul de rebase după ce ai rezolvat conflictele și ai rulat git add.
--skip Sare peste commit-ul curent care produce conflict.

Exemple

Exemplul 1: Curățarea istoricului cu rebase interactiv

Permite combinarea ultimelor 3 commit-uri într-unul singur cu comanda ‘squash’.

git rebase -i HEAD~3

Ieșire în terminal

pick 1a2b3c4 Adauga structura de baza
squash 2b3c4d5 Corecteaza un typo
squash 3c4d5e6 Adauga teste unitare

# Rebase 0a1b2c3..3c4d5e6 onto 0a1b2c3 (3 commands)
# p, pick = pastreaza commit
# s, squash = uneste commit-ul in cel anterior

Greșeli frecvente

  • Regula de aur a rebase-ului: NU aplica NICIODATĂ git rebase pe o ramură publică comună (cum ar fi main împărțit cu echipa)! Rescrierea istoricului pe ramuri publice forțează ceilalți dezvoltatori să își repare manual depozitele locale.

Comenzi înrudite

  • git merge: Îmbină istoricul și modificările dintr-o altă ramură în ramura curentă.
  • git cherry-pick: Copiază și aplică un commit specific dintr-o altă ramură în ramura curentă.
  • git reset: Mută indicatorul ramurii curente (HEAD) la un commit anterior și ajustează staging-ul sau fișierele locale.