Vezérlőpult
28. Mentőöv: reflog, blame, cherry-pick · Eszközök és haladó témák

6. témakör · Eszközök és haladó témák · 28. fejezet

Mentőöv: reflog, blame, cherry-pick

Eltűnt commitok egy reset --hard után, véletlenül törölt ág, egy rejtélyes sor, amiről senki nem tudja, honnan jött, egy javítás, ami rossz ágra került. Ezekre a helyzetekre való a Git mentőöve. A jó hír: ami egyszer commitolva volt, azt a Git szinte mindig vissza tudja adni — csak tudni kell, hol keresd.

CLIMentőöv-választóBesorolóMentő-labor16 kvízkérdés

Tanulási célok

1Mit felejt el a Git, és mit nem?

✅ Visszahozható
  • minden commit, amit valaha készítettél — egy reset --hard, egy amend, egy rebase vagy egy ágtörlés után is
  • a stash-be tett munka (git stash list)
  • a GitHubra feltöltött munka (onnan újra letölthető)
⛔ Nem hozható vissza a Gittel
  • a soha nem commitolt módosítás, amit git restore, git reset --hard vagy git checkout -- fájl eldobott
  • a git clean -f-fel törölt, követetlen fájl
  • (Utolsó esély: az IDE saját előzményei, pl. a VS Code Timeline → Local History.)
💡 A LEGJOBB MENTŐÖV: COMMITOLJ GYAKRAN

A Git azt védi, amit commitoltál. Egy „wip” commit egy kockázatos lépés előtt semmibe nem kerül (később összevonhatod, 14. fejezet), egy elveszett délutáni munka viszont sokba.

2git reflog: a HEAD naplója

A reflog (reference log) feljegyzi, hová mutatott a HEAD az elmúlt időszakban: minden commitot, váltást, resetet, merge-et, rebase-t. Akkor is, ha az a commit már egyetlen ágról sem érhető el. (Már a 10. fejezetben is találkoztál vele.)

PS> git reflog
a4c19e2 (HEAD -> main) HEAD@{0}: reset: moving to HEAD~2
7e3d0c1 HEAD@{1}: commit: Hírek oldal
52b8f4a HEAD@{2}: commit: Galéria oldal
a4c19e2 HEAD@{3}: checkout: moving from kiserlet to main
PS> git reset --hard HEAD@{1}        # vissza oda, ahol a reset előtt voltunk
HEAD is now at 7e3d0c1 Hírek oldal
BajMentés
git reset --hard „eltüntetett” commitokatgit reflog → git reset --hard HEAD@{1} (vagy a megtalált hash)
törölt ág (git branch -D kiserlet)a törlés kiírja: Deleted branch kiserlet (was 9f2c1b7) → git branch kiserlet 9f2c1b7; ha már nem látod, a reflogban keresd
amend előtti változat kellenegit reflog → a commit (amend) előtti sor hash-e
elrontott rebase vagy mergegit reset --hard ORIG_HEAD (a művelet előtti HEAD), vagy a reflogból
⚠️ A REFLOG HELYI

A reflog csak a te gépeden létezik, és a bejegyzések idővel lejárnak (alapból 90, illetve az elérhetetlen commitoknál 30 nap). Egy friss klónban üres. A GitHubon törölt PR-ágat a PR oldalán a Restore branch hozza vissza (20. fejezet).

Biztonsági tipp: mielőtt bármi kockázatosat csinálsz (reset, rebase), tegyél egy „könyvjelzőt”: git branch mentes. Az ág megtartja a mostani commitot, bármi történik.

3git blame: ki írta ezt a sort?

PS> git blame -L 2,3 index.html
^71e3b0a (Kovács Anna 2026-09-15 10:00:00 +0200 2) <p>Foglalkozás: csütörtök 15:00</p>
3c9d4e2f (Szabó Lili  2026-09-19 18:20:00 +0200 3) <p>Kapcsolat: robotka@iskola.hu</p>
PS> git show 3c9d4e2f              # a teljes commit: üzenet, dátum, minden változás
ℹ️ „BLAME” = HIBÁZTATÁS?

A név vicces, de a cél nem a bűnös megkeresése, hanem a kontextus: miért lett ilyen a sor, milyen feladathoz tartozott, kitől kérdezhetsz. Lehet, hogy a „hibás” sor egy tudatos döntés volt.

4Keresés a történetben

ParancsMit talál meg?
git log --grep="menü"azokat a commitokat, amelyek üzenetében szerepel a szó
git log -S "robot2026"azokat a commitokat, amelyek a kódba behozták vagy kivették a szöveget („csákány”, pickaxe)
git log -- admin.jsegy fájl összes commitját
git log --author="Lili"egy szerző commitjait
git log --all --onelineminden ág commitját (nem csak az aktuálisét)

5git cherry-pick: egyetlen commit átemelése

A cherry-pick („cseresznyeszedés”) egy másik ág egyetlen commitjának változását új commitként teszi az aktuális ágra. Nem olvasztja be az egész ágat, csak azt az egyet.

Előtte: a javítás a kiserlet ágon van

A git switch main és a git cherry-pick 9f2c1b7 után

PS> git switch main
PS> git cherry-pick 9f2c1b7
[main 4d8e0a3] fix: e-mail-cím javítása
 Date: Tue Sep 22 17:05:00 2026 +0200
 1 file changed, 1 insertion(+), 1 deletion(-)
Tipikus helyzetMegoldás cherry-pickkel
A feature ágon javítottál egy hibát, ami a main-en is megvan, de a feature még nincs készgit switch main, git cherry-pick <javító commit>
A main-re commitoltál, pedig a feature ágra kellett volna (még nem push-oltad)git switch feature, git cherry-pick main; aztán git switch main, git reset --hard HEAD~1
Egy régi kiadást kell javítani (pl. egy v1.x ágon)a main-en kész javítás átemelése a régi ágra
⚠️ NEM A MERGE HELYETT

Ha egy ág teljes munkája kell, olvaszd be (merge / PR). A sok cherry-pick duplikált commitokat hoz létre (ugyanaz a változás két hash-sel), ami később zavaros történethez és felesleges ütközésekhez vezet.

reflog, blame vagy cherry-pick?

Melyik eszköz való a helyzethez?

1 / 8Pontszám: 0
…

6git bisect: melyik commit rontotta el?

Tegnap még működött, ma nem, és közben 40 commit érkezett. Melyik rontotta el? A bisect bináris kereséssel találja meg: mindig a tartomány felénél kér egy ítéletet (good vagy bad), így 40 commitból kb. 6 lépésben megvan a bűnös.

PS> git bisect start
PS> git bisect bad                 # a mostani állapot hibás
PS> git bisect good v1.0.0         # ez a régi kiadás még jó volt
Bisecting: 19 revisions left to test after this (roughly 4 steps)
# … a Git átvált egy középső commitra: kipróbálod, majd:
PS> git bisect good                # vagy: git bisect bad
# … néhány kör után:
5d7a2c1 is the first bad commit
PS> git bisect reset               # vissza az eredeti ágra

A szimulátor a bisectet nem futtatja, de ha egyszer egy nagy projektben „valami elromlott valamikor”, emlékezz rá: ez a leggyorsabb út a hibás commithoz.

7Mentőöv-választó

Mi történt? Válaszd ki, és megkapod a mentés lépéseit.

Mi a baj?

8Mentő-labor

A robotika klub honlapján (klubhonlap) több baj is van, és te is okozol egyet szándékosan, hogy kipróbáld a mentést. A gráf a reflogban még meglévő, de ágról már nem elérhető commitokat is mutatja (szaggatott vonallal).

PowerShell + Git

Windows PowerShell
Küldetések 0 / 8
    A klubhonlap commitgráfja

    9Feladatok

    Gyakorló feladatok

    ⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás

    28.1⭐CLI

    Egy gyakorló repóban készíts három commitot, majd git reset --hard HEAD~3. Hozd vissza őket a reflog segítségével. Írd le, melyik sor mutatta a helyes hash-t.

    28.2⭐CLIWeb

    Egy csapatmunka repójában futtasd le a git blame-et egy fájlra, és nézd meg ugyanezt a GitHubon a Blame gombbal. Keress egy sort, és a git show segítségével derítsd ki, miért került oda.

    28.3⭐⭐CLI

    Töröld egy ágadat git branch -D-vel, majd hozd vissza. Próbáld ki úgy is, hogy a törlés kimenetét nem nézed meg, csak a reflogot.

    28.4⭐⭐CLI

    Commitolj szándékosan a main-re, majd tedd át a commitot egy új feature ágra (cherry-pick + reset). Ellenőrizd a git log --oneline --graph --all-lal.

    28.5⭐⭐CLI

    Idézz elő cherry-pick-ütközést (a cél ágon ugyanaz a sor másként változott), oldd fel, és fejezd be a --continue-val. Utána próbáld ki az --abort-ot is.

    28.6⭐⭐CLI

    Keresd meg egy projektben git log -S-sel, melyik commit hozott be egy adott függvénynevet, és --grep-pel a „fix” szót tartalmazó commitokat.

    28.7⭐⭐⭐CLI

    Egy saját gépi repóban (valódi Gittel) próbáld ki a git bisect-et: 10 commitból az egyik szándékosan elront egy számítást. Hány lépésben találja meg a Git?

    10Önellenőrző kvíz

    Ellenőrizd magad!

    Az egyválasztós kérdéseknél kattints a válaszra. A többválasztósaknál jelöld be az összes helyeset, majd nyomd meg az Ellenőrzés gombot.

    11Fogalomtár

    FogalomJelentés
    refloga HEAD (és az ágak) mozgásainak helyi naplója; innen az ágról már nem elérhető commitok is visszahozhatók
    HEAD@{n}ahol a HEAD n lépéssel korábban állt
    ORIG_HEADa HEAD helye egy veszélyes művelet (reset, merge, rebase) előtt
    blamesoronként kiírja, melyik commit, ki és mikor módosította utoljára
    pickaxe (git log -S)azokat a commitokat keresi, amelyek egy szöveget behoztak vagy kivettek
    cherry-pickegy (vagy néhány) commit változásának átemelése új commitként az aktuális ágra
    bisectbináris keresés a hibát okozó commitra (good/bad ítéletekkel)
    árva (elérhetetlen) commitcommit, amelyre már egyetlen ág sem mutat; a reflogból még elérhető, amíg le nem jár

    12Összegzés

    1. A commitolt munka szinte mindig visszahozható, a soha nem commitolt nem: commitolj gyakran, kockázatos lépés előtt git branch mentes.
    2. git reflog: hol járt a HEAD; mentés: git reset --hard HEAD@{n} vagy git branch név <hash>. Helyi, és lejár.
    3. git blame [-L a,b] fájl + git show <hash>: ki, mikor, miért.
    4. Keresés: --grep (üzenetben), -S (kódban), -- fájl, --author.
    5. git cherry-pick <hash>: egyetlen commit átemelése (új hash); ütközésnél add → --continue. Egész ághoz inkább merge. Hibakereséshez: git bisect.

    Ezzel a tananyag új anyagrésze véget ért. A következő, összefoglaló témakör a fogalmak rendszerezésével kezdődik.