Haladó Git parancsok
stash, rebase, cherry-pick, bisect és interaktív rebase haladó workflow-khoz.
Haladó parancsok (stash, rebase)
git stash – változások ideiglenes félretétele
Mit csinál: Elmenti a jelenlegi, stage-elt és nem stage-elt változásokat, majd visszaállítja a working directory-t a tiszta állapotba. Hasznos, ha gyorsan branch-et kell váltani anélkül, hogy commitálnánk a félkész munkát.
# Aktuális változások félretétele
git stash
# Félretétel üzenettel
git stash push -m "WIP: login form validation"
# Stash-ek listázása
git stash list
# Legutóbbi stash visszaállítása (és törlése a listából)
git stash pop
# Egy adott stash visszaállítása (törlés nélkül)
git stash apply stash@{2}
# Stash tartalmának megtekintése
git stash show -p stash@{0}
# Stash törlése
git stash drop stash@{0}
# Összes stash törlése
git stash clear
# Új branch létrehozása a stash tartalmával
git stash branch feature/saved-work stash@{0}git rebase – commit history átírása
Mit csinál: Egy branch commit sorozatát áthelyezi egy másik base commitra. Lineárisabb, olvashatóbb historyt eredményez.
Mikor használjuk: Feature branch-ek frissítésekor (ahelyett, hogy merge-ölnénk a main-t bele), és a push előtti history szépítésekor.
# Feature branch frissítése a main alapján
git switch feature/my-feature
git rebase main
# Interaktív rebase: az utolsó 3 commit módosítása
git rebase -i HEAD~3
# Rebase megszakítása ütközés esetén
git rebase --abort
# Ütközés feloldása után folytatás
git rebase --continue
# Egy commit kihagyása rebase közben
git rebase --skipInteraktív rebase – commit history szépítése
Az git rebase -i az egyik leghatékonyabb eszköz a history szépítéséhez, mielőtt feltöltjük a kódot.
git rebase -i HEAD~4Ez megnyit egy szerkesztőt, amelyben a commitok sorrendbe vannak rendezve:
pick a1b2c3d feat: add login form
pick b2c3d4e fix: typo in login
pick c3d4e5f fix: another typo
pick d4e5f6g feat: add logout button
# Parancsok:
# p, pick = megtartja a commitot
# r, reword = megtartja, de szerkeszti az üzenetet
# e, edit = megállít a commitnál szerkesztéshez
# s, squash = az előző commitba olvasztja
# f, fixup = squash, de az üzenetet elveti
# d, drop = törli a commitotPélda: a két "typo" fixet a login commitba préselünk:
pick a1b2c3d feat: add login form
fixup b2c3d4e fix: typo in login
fixup c3d4e5f fix: another typo
pick d4e5f6g feat: add logout buttonRebase vs Merge
| Szempont | Merge | Rebase |
|---|---|---|
| History | megőrzi a branch struktúrát | lineáris, "tiszta" |
| Merge commit | igen (--no-ff esetén) | nem |
| History biztonság | nem írja át | átírja |
| Konfliktus | egyszer | minden commitnál |
| Ajánlott | main-be mergeléskor | feature branch frissítésekor |
git cherry-pick – egyedi commit átvétele
Mit csinál: Egy adott commitot átvesz egy másik branch-ről az aktuálisra.
# Egyetlen commit átvétele
git cherry-pick a3f2c1d
# Több commit átvétele
git cherry-pick a3f2c1d b7e9f2a
# Commit üzenet módosítással
git cherry-pick -e a3f2c1dgit bisect – hibás commit megkeresése
Mit csinál: Bináris keresés segítségével megtalálja azt a commitot, amely egy hibát bevezetett.
git bisect start
git bisect bad # az aktuális állapot hibás
git bisect good a3f2c1d # ez a commit még jó volt
# Git automatikusan checkout-ol commitokat
# Jelöljük meg minden alkalommal:
git bisect good # ha a jelenlegi commit még jó
git bisect bad # ha a jelenlegi commit már rossz
# Git megtalálja a hibás commitot
# Végén:
git bisect resetRövid összefoglaló
git stash– félreteszi a félkész munkát;popvisszaállítja.git rebase main– frissíti a feature branch-et merge commit nélkül.git rebase -i HEAD~N– interaktív history szépítés: squash, fixup, reorder.git cherry-pick– egyedi commit átvétele másik branch-ről.git bisect– bináris kereséssel megtalálja a hibát bevezető commitot.- Rebase csak lokális / saját branch-ekre; ne rebase-elj megosztott branch-eket!