Tipy & triky · Workflow · Všude · ~30 min měsíčně · 2 min čtení
git reflog: záchrana, když jste si „smazali“ commity
Naposledy ověřeno:

Ten mrazivý pocit zná každý: git reset --hard na špatném místě, smazaná větev s necommitnutou prací nebo rebase, po kterém historie vypadá úplně jinak — a commity jako by zmizely. Dobrá zpráva: git skoro nikdy nic nemaže hned. Příkaz git reflog vede deník všech pozic, kterými prošel ukazatel HEAD — každý commit, přepnutí větve, reset i rebase. I commit, na který už neukazuje žádná větev, v tomhle deníku pořád je a dá se obnovit. Reflog je záchranná brzda, o které byste měli vědět dřív, než ji budete potřebovat.
Jak na to
- Spusťte
git reflog— vypíše se seznam záznamů od nejnovějšího: zkrácený otisk commitu, značka jakoHEAD@{2}a popis akce („commit: …“, „reset: …“, „checkout: …“). - Najděte v seznamu poslední stav, kdy bylo všechno v pořádku — typicky záznam těsně před osudným příkazem. Popisy akcí vám pomůžou se zorientovat, kdy se co stalo.
- Prohlédněte si ho:
git show HEAD@{2}(nebo přímo otisk commitu) ukáže, co v něm je — ověřte, že je to opravdu ten správný stav. - Nejbezpečnější obnova:
git branch zachrana HEAD@{2}vytvoří na ztraceném commitu novou větev, aniž byste cokoli přepsali. Pak se na ni přepněte a v klidu prohlédněte, co jste zachránili. - Chcete-li vrátit aktuální větev, použijte
git reset --hard HEAD@{2}— ale s rozmyslem: přepíše to, kde větev stojí teď. Pokud si nejste jistí, držte se varianty s novou větví.
Vzorová situace
Vývojářka večer uklízí větve a smaže i tu, na které měla dva dny práce — všimne si toho až ráno, když větev nikde není. Dřív by to znamenal ztracený víkend a psaní znovu. Teď: git reflog, v seznamu najde poslední commit smazané větve („commit: formulář validace“), git branch zachrana abc1234 — a práce je zpátky, do poslední čárky. Celá záchrana trvala dvě minuty.
Jedno upozornění: reflog je lokální deník vašeho počítače a staré záznamy git po čase promazává (výchozí lhůty se počítají v týdnech až měsících). Zachraňujte tedy brzy — a reflog vám zachrání jen to, co bylo aspoň jednou commitnuté. Necommitnutá práce v něm není; i proto se vyplatí commitovat často a průběžně — klidně nedokonale, na pracovní větvi se dá historie před sdílením učesat. Commit je v gitu nejlevnější pojistka, jaká existuje, a reflog je důvod, proč se vyplácí.
Co vám to přinese
Nejhorší git nehody — špatný reset, smazaná větev, zpackaný rebase — přestanou být katastrofou a stanou se dvouminutovou opravou. A hlavně získáte klid: s vědomím, že reflog existuje, se přestanete bát destruktivně znějících příkazů a začnete git používat odvážněji.
Chcete jít do hloubky? V příručce najdete kapitolu Základní systémy: inbox, priority, revize.
Podobné tipy
Porada bez agendy se nekoná
Jednoduché pravidlo, které smaže polovinu porad: kdo poradu svolává, posílá předem agendu a očekávaný výstup.
První obrazovka jen s nástroji
Sociální sítě a zábava pryč z první obrazovky — zůstane kalendář, úkoly, poznámky. Co nevidíte, to neotevřete bezmyšlenkovitě.
Režim spánku: telefon jde spát dřív než vy
Hodinu před spaním telefon ztmavne, ztiší se a přestane lákat. Nastavíte jednou — a spíte líp každý den.
Pomohlo vám to?
Líbil se vám tip?
Každý týden posílám jeden takový do e-mailu. Dvě minuty čtení, hodiny úspor.
1 tip týdně · žádný spam · odhlášení jedním klikem