Rebase pe scurt
Rebase rescrie istoria: în loc să creezi un commit de merge, „rejoci" commit-urile tale peste vârful actual al altui branch. Rezultatul e o istorie liniară, mai ușor de citit. Are o regulă de aur: nu faci rebase la commit-uri deja împinse și folosite de alții.
Merge vs. rebase
Merge: păstrează istoria exact cum s-a întâmplat, cu un commit de îmbinare. Rebase: rescrie commit-urile tale ca și cum ai fi pornit de la cel mai nou main — istorie liniară, fără commit-uri de merge.
Rebase pe main
git switch functie/x
git fetch origin
git rebase origin/main
# commit-urile tale sunt acum "deasupra" celui mai nou main
# la conflicte: rezolvi, apoi: git rebase --continueRegula de aur
NU face rebase la commit-uri pe care le-ai împins deja și pe care le-ar putea avea și altcineva. Rebase-ul le schimbă identitatea (hash-ul), iar ceilalți ajung cu istorii divergente. Rebase doar la commit-uri locale, ne-împărtășite.
Squash înainte de merge
# combină ultimele 3 commit-uri într-unul curat:
git rebase -i HEAD~3
# în editor: lași "pick" pe primul, pui "squash" pe celelalteCând folosești ce
- Rebase: pentru a-ți curăța branch-ul local înainte de PR.
- Merge: pentru a integra un PR aprobat în main (adesea „squash and merge" pe GitHub).
- Dacă ai dubii și lucrezi în echipă: merge e mai sigur.
Curățarea unui branch înainte de PR
git switch functie/export git fetch origin git rebase origin/main # aduci branch-ul la zi, liniar git rebase -i HEAD~4 # combini commit-urile "wip" într-unul clar git push --force-with-lease # rescrie branch-ul TĂU pe remote (safe force)
Exercițiu
Pe un branch local cu 3-4 commit-uri mici („wip", „fix typo"), fă git rebase -i și combină-le într-1-2 commit-uri cu mesaje bune. Apoi rebase pe main. NU face asta pe un branch pe care lucrează și altcineva.
Greșeli frecvente
- Rebase la commit-uri deja împinse și folosite de colegi.
- git push --force (brutal) în loc de --force-with-lease.
- Rebase în mijlocul unui conflict fără să înțelegi ce rejoci.
- Folosești rebase peste tot „că e mai curat" fără să înțelegi riscul.
De reținut
- Rebase = istorie liniară, rejucând commit-urile tale peste main.
- Regula de aur: doar la commit-uri locale, ne-împărtășite.
- rebase -i pentru squash / curățare înainte de PR.
- --force-with-lease, niciodată --force simplu.
Pe scurt
Rebase îți dă o istorie curată, dar rescrie commit-uri. Folosește-l pe branch-urile tale locale; pentru integrare în echipă, merge e mai sigur.