Git Merge protiv Rebase
Git merge i rebase imaju istu svrhu - kombinuju više grana u jednu. Iako je konačni cilj isti, te dve metode ga postižu na različite načine. Koji metod koristiti?
Šta znače Merge ili Rebase?
Ovde imamo primerak repozitorijuma koje ima dve različite grane: master i feature. Želimo da ih spojimo. Pogledajmo kako ove metode mogu rešiti problem.
Merging
Kada pokrenete git merge
, vaša HEAD grana će generisati novi commit, čuvajući predak svake istorije commit-ova.
Fast forward merge je vrsta spajanja koja ne stvara commit, već ažurira pokazivač grane na poslednji commit.
Rebasing
Rebase ponovo zapisuje promene jedne grane u drugu bez stvaranja novog urezivanja.
Za svaki commit koji imate na feature grani, a ne u master, kreiraće se nov commit na vrhu master-a. Izgledaće kao da su ti commit-ovi sve vreme bili napisane na vrhu master grane.
Merging Za i Protiv
Za:
- Jednostavno za upotrebu i razumevanje.
- Održava izvorni kontekst izvorne grane.
- Commit-ovi na izvornoj grani odvojeni su od ostalih commit-ova grana. Ovo može biti korisno ako kasnije želite da uzmete feature i spojite je u drugu granu.
- Čuva istoriju urezivanja i održava grafikon istorije semantički tačnim.
Protiv:
- Istorija može postati intenzivno zagađena mnoštvom spajanja commit-ova, jer više ljudi paralelno radi na istoj grani. Vizuelne tabele vašeg repozitorijuma mogu postati nered i ne dodavati previše informacija. To može izgledati kao London Tube Map Commit!
- Otklanjanje grešaka pomoću git bisect može postati mnogo teže zbog spajanja commit-ova.
Rebasing Za i Protiv
Za:
- Istorija koda je pojednostavljena, linearna i čitljiva.
- Manipuliranje jednom istorijom commit-ovanja je lakše od istorije mnogih zasebnih feature grana sa njenim dodatnim commit-ovima.
- Čiste, jasne poruke commit-ova poboljšavaju praćenje greške ili kada je feature uveden. Izbegavajte zagađivanje istorije sa više od 20 linija u jednom redu!
Protiv:
Spuštanje feature na pregršt commit-ova može sakriti kontekst.
Rebase ne funkcioniše sa zahtevima za povlačenje, jer ne možete da vidite koje manje promene je neko napravio. Prekrajanje istorije je loše za timski rad!
Morate biti oprezniji sa rebasing nego sa merge.
Zahteva više rada u suočavanju sa konfliktima. Korišćenje rebase za ažuriranje vaše feature grane zahteva da iznova rešavate slične konflikte. Dok spajate, jednom kada rešite konflikte, spremni ste. Morate da rešite konflikte redosledom kojim su stvoreni da biste nastavili rebase.
Koji metod odabrati?
Kada vaš tim koristi tok rada zasnovan na karakteristikama ili nije upoznat sa rebase, tada je git merge
pravi izbor za vas:
- Omogućava vam da sačuvate istoriju commit-ova za bilo koju funkciju, a da pritom ne brinete o nadjačavanju urezivanja i promeni istorije. Pomaže vam u izbegavanju nepotrebnih git reverts ili resets!
- Različiti feature-i ostaju izolovani i ne ometaju postojeće istorije commit-ova.
- Može vam pomoći da ponovo integrišete završenu granu obeležja.
S druge strane, ako više cenite čistu, linearnu istoriju, git rebase
će možda biti najprikladniji. Izbeći ćete nepotrebne commit-ove, a promene održavati centralizovanijim i linearnijim!
Ako pogrešno rebase-ujete i nenamerno prepišete istoriju, to može dovesti do ozbiljnih problema, zato budite sigurni da znate šta radite!
Rebase ili merge, šta želite? Ovde u Koloseku, više se naginjemo merge-u za naš tok rada zasnovan na karakteristikama.
Pretplatite se na git više informacija u našim sledećim izdanjima članaka!