Hibák javítása Git-ben
commit amend, reset, revert, restore és reflog a hibák biztonságos kezeléséhez.
Hibák javítása (reset, revert, amend)
A hibák elkerülhetetlenek. A Git számos eszközt kínál a javításukra – a legfontosabb, hogy tudjuk, mikor melyiket kell használni.
git commit --amend – utolsó commit módosítása
Mit csinál: Módosítja az utolsó commitot (üzenet vagy tartalom módosítható).
Mikor használjuk: Közvetlenül az utolsó commit után, ha elírtuk az üzenetet vagy elfelejtettünk egy fájlt hozzáadni.
# Csak az üzenet módosítása
git commit --amend -m "fix: correct the error message wording"
# Fájl hozzáadása az utolsó commithoz
git add forgotten-file.ts
git commit --amend --no-edit # az üzenet marad
# Üzenet szerkesztése editorban
git commit --amendFigyelem: Az
amendújraírja a commit hash-jét. Ha már pushölted a commitot,--force-with-lease-t kell használni. Csak saját feature branch-en alkalmazd!
git reset – commitok visszavonása
Mit csinál: Visszaállítja az aktuális branch-et egy korábbi állapotba. Háromféle módban működik.
Mikor használjuk: Amikor lokálisan szeretnénk visszavonni commitokat.
# --soft: a commitok visszavonódnak, de a változások stage-elve maradnak
git reset --soft HEAD~1
# --mixed (alapértelmezett): commitok visszavonódnak, változások nem stage-eltek
git reset HEAD~1
# vagy
git reset --mixed HEAD~1
# --hard: commitok ÉS változások is elvesznek (visszafordíthatatlan!)
git reset --hard HEAD~1
# Visszaugrás egy adott commitra
git reset --hard a3f2c1d
# Egy fájl unstage-elése (a változtatás megmarad a munkakönyvtárban)
git reset HEAD src/index.tsA három mód összehasonlítása:
| Mód | Commit history | Staging area | Munkakönyvtár |
|---|---|---|---|
--soft | visszavon | megőrzi | megőrzi |
--mixed | visszavon | törli | megőrzi |
--hard | visszavon | törli | törli |
Figyelem: A
--hardreset nem visszafordítható könnyen. Légy óvatos, főleg ha már pusholtál.
git revert – commit visszafordítása (biztonságos)
Mit csinál: Létrehoz egy új commitot, amely visszafordítja a megadott commit változásait. A history megmarad.
Mikor használjuk: Ha már pusholt commitot kell visszavonni – ez a biztonságos módja, mert nem írja át a historyt.
# Az utolsó commit visszafordítása
git revert HEAD
# Egy adott commit visszafordítása
git revert a3f2c1d
# Több commit visszafordítása (commitok nélkül, majd egy commit)
git revert --no-commit HEAD~3..HEAD
git commit -m "revert: undo last 3 commits"git restore – fájlok visszaállítása (modern)
Mit csinál: Visszaállítja a fájlokat a staging area vagy a repository állapotára.
# Munkakönyvtárbeli változás eldobása
git restore src/index.ts
# Unstage: a fájl eltávolítása a staging area-ból (változás megmarad)
git restore --staged src/index.ts
# Fájl visszaállítása egy adott commit állapotára
git restore --source=a3f2c1d src/index.tsgit reflog – elveszett commitok visszakeresése
Mit csinál: A HEAD és más referenciák minden mozgását naplózza. Segítségével visszakereshetők a "elveszett" commitok is.
# Reflog megtekintése
git reflog
# Visszatérés egy reflog bejegyzéshez
git reset --hard HEAD@{3}Tipp: Ha véletlenül
git reset --hard-dal töröltél commitokat, agit reflogsegítségével visszahozhatod őket, amíg a Git garbage collection el nem távolítja őket.
Rövid összefoglaló
git commit --amend– az utolsó commit gyors javítása (csak lokális / nem pusholt commitoknál).git reset --soft HEAD~1– commit visszavonása, változások megtartásával.git reset --hard– veszélyes; törli a változásokat is;reflog-gal visszakereshető.git revert– biztonságos visszavonás megosztott branch-eken; új commitot hoz létre.git reflog– az elveszett commitok mentőöve.