ITHub

A commiton és a pullon túl II.: További hasznos Git parancsok

A commiton és a pullon túl II.: További hasznos Git parancsok
ITHub
ITHub
| ~3 perc olvasás

Az előző blogunkban megnéztünk néhány Git parancsot, amelyek megkönnyíthetik a teljesen kezdők életét. Ma folytatjuk sorozatunkat, és ismertetünk két másik opciót, amik nagyban növelhetik a hatékonyságodat a Gittel való munka során.

Git

Git Rebase

Sokszor hallani, hogy a git rebase valami olyan varázslat, amelytől jobb, ha a kezdők távoltartják magukat, de ha okosan használjuk, jó szolgálatot tehet.

Ha nem ismered jól ezt a parancsot, a legfontosabb talán azt megjegyezni, hogy a git rebase és a git merge (amelyet a legtöbben bizonyára ismertek már) ugyanazt a célt szolgálja, vagyis két branch változtatásait egyesítik, de a módszer meglehetősen különböző a két esetben. Míg a mergenél a két branch változtatásait úgy egyesítjük, hogy egy ún. merge committal az egyik branchbe integráljuk a másik változtatásait, ezzel szemben a rebase a branch történetét megváltoztatva alkalmazza a másik branchben történt változtatásokat a jelenlegiben.

A merge előnye, hogy nem változtat a meglévő brancheken, hátránya viszont, hogy a mellékbranch történetében minden alkalommal, amikor beolvasztjuk a fő branch változtatásait, zavaró merge commitok keletkeznek.

A rebase művelet esetén a mellékbranch kezdőpontját a főbranch végpontjához mozgatjuk, és ismételten végrehatjuk az ott történt változtatásokat, ezzel teljesen új commitokat létrehozva. A rebase fő előnye, hogy sokkal letisztultabb historyt ad (nincsenek merge commitok), és a projekt története teljesen lineáris lesz, nincsenek elágazások, kizárólag a master branch legvégén.

A művelet hátránya, hogy kevéssé követhető (merge commitok hiányában nem látjuk pontosan, mikor kerültek a fő branch változtatásai a mellékbranchbe). Emellett akár katasztrofális következményei is lehetnek, ha nem tartunk egy fontos szabályt: a git rebase műveletet sosem használjuk publikus branchen! Ez azért fontos, mert ilyenkor a többi fejlesztő még mindig az eredeti branchen fog dolgozni, a Git pedig úgy fogja értelmezni a szituációt, mintha a te branched története egy ponton elvált volna mindenki másétól. Szóval mielőtt végrehajtunk egy git rebase-t, mindig gondoljuk át, hogy valaki más is használja-e a kiszemelt branchet!

Git Cherry-Pick

A git cherry-pick egy ritkábban használt parancs, de sokszor jól jöhet. Alapvetően ez a művelet egy tetszőlegesen kiválasztott, múltbéli commit változtatásait alkalmazza a jelenlegi branchre.

Fontos megjegyezni, hogy mivel a gitben egy commit azonosítóját a változtatás tartalma és kezdőpontja együttesen határozza meg, a git cherry-pick egy teljesen új commitot fog létrehozni, hiába ugyanazt a változtatást alkalmazzuk.

Git Fixup

Képzeljük el azt a mindennapi szituációt, amikor egymás után fejlesztünk le két változtatást, legyenek ezek A és B. Néhány fájl módosítása után elkészültünk az elsővel, így a szokásos módon csinálunk egy commitot:

git commit -m "Az A valtoztatas elkeszult!"

Folytatjuk a munkát, ezúttal a B változtatáson dolgozunk, ezzel hamar végzünk is, és ismét commitolunk:

git commit -m "A B valtoztatas elkeszult!"

Ekkor azonban rájövünk, hogy valamit elfelejtettünk az A változtatás során, így gyorsan kijavítjuk, és újra commitálunk egy "Fix A" üzenettel. Ezután a history valahogy így néz ki:

fe4da2a Az A valtoztatas elkeszult!
ac6dc87 A B valtoztatas elkeszult!
743e6ff Fix A

Letisztultabbá tehetjük a commitok történetét, ha az utolsó javítást a git commit --fixup ac6dc87 paranccsal végezzük el, így jelezve, hogy ez egy korábbi commit javítása. Ezután ha végrehajtunk például egy rebase-t később, a Git összevonja a fixup commitot az eredetivel, eltüntetve így a "szemetelő" változtatást.