Integrare avansată a ramurilor: Git Rebase

Git avansat

Amanda Crawford-Adamo

Software and Data Engineer

Git rebase

  • Metodă de integrare a modificărilor
  • Diferită de merge
  • Elimină commit-urile de merge pentru un istoric mai curat
  • Menține un grafic de commit-uri liniar

Comanda Git Rebase:

git rebase <branch_name>
Git avansat

Exemplu de rebase - înainte

Imaginea prezintă ramura data-cleanup și ramura main. Ramura de funcționalitate diverge după al doilea commit din main. Ramura main are două commit-uri suplimentare față de momentul creării ramurii data-cleanup.

Git avansat

Procesul de rebase

  1. Comutați pe ramura de funcționalitate data-cleanup.
git checkout data-cleanup
  1. Efectuați rebase pe ramura main în data-cleanup.
git rebase main
  • Commit-urile din data-cleanup sunt recreate după ultimul commit din main
  • Commit-urile rebasate din data-cleanup primesc hash-uri noi

Notă: Dacă există conflicte, acestea trebuie rezolvate manual.

Git avansat

Exemplu de rebase - după

Imaginea prezintă ramura data-cleanup rebasată pe ramura main. Ramura data-cleanup include acum toate commit-urile din main, iar commit-urile sale încep după acestea. Ramura main nu s-a modificat.

Git avansat

Rebase interactiv

git rebase -i <commit_hash> 

Funcționalitate

  • Permite modificări granulare asupra mai multor commit-uri
  • Deschide un editor

Avertisment!

  • Rebase pe ramuri publice poate perturba fluxurile de lucru
    • Nu utilizați rebase pe ramuri publice, precum main
  • Stabiliți reguli de echipă privind utilizarea rebase
Git avansat

Rebase interactiv - înainte

$$

Aceasta este istoricul ramurii data-validation înainte de editarea istoricului de commit-uri.

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit
Git avansat

Editorul de rebase interactiv

Editarea istoricului de commit-uri folosind comenzile pick și fixup în editorul deschis.

$ git rebase -i HEAD~3 
pick ghi9101 Add data validation function
fixup def5678 Fix validation bug
fixup abc1234 Optimize validation performance

# Rebase xyz1234..abc1234 onto HEAD~3(xyz1234) (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# f, fixup <commit> = like "squash", but discard this commit's log message
...
Git avansat

Rebase interactiv - după

Înainte

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

După

$ git log --oneline data-validatoin
mno6789 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

Următoarele commit-uri sunt combinate într-unul singur

  • abc1234
  • def5678
  • ghi9101
Git avansat

Merge versus rebase

Imaginea prezintă trei grafice: o ramură divergentă, graficul rezultat după merge și graficul rezultat după rebase

Merge

  • Păstrează istoricul complet și structura ramurilor
  • Menține contextul dezvoltării paralele

Rebase

  • Replasează commit-urile pe ramura țintă
  • Creează un istoric liniar
  • Pierde unele informații contextuale
Git avansat

Când să utilizați merge versus rebase

Merge

Pentru integrarea funcționalităților finalizate, păstrând contextul dezvoltării

Rebase

Pentru actualizarea ramurilor de funcționalități cu main sau pentru curățarea istoricului înainte de merge

Rețineti

  • Rebase rescrie istoricul — utilizați-l cu atenție
Git avansat

Să exersăm!

Git avansat

Preparing Video For Download...