Tipy & triky · Workflow · Všude · ~5 min týdně · 2 min čtení
git commit --amend: opravte poslední commit
Naposledy ověřeno:

Commitnete, a vteřinu poté to uvidíte: ve zprávě je překlep, nebo hůř — zapomněli jste přidat jeden soubor. Reflex velí udělat druhý commit s názvem „oprava“, „fix“ nebo „teď už fakt“. Historie plná takových záplat se ale špatně čte a při hledání chyby jen překáží. Git na to má čistší nástroj: git commit --amend nevytvoří nový commit, ale přepíše ten poslední — přibalí do něj, co jste zapomněli, nebo opraví zprávu. Výsledek vypadá, jako byste to napoprvé udělali správně.
Jak na to
- Překlep ve zprávě: spusťte
git commit --amend -m "správná zpráva"— commit zůstane, jen dostane novou zprávu. Bez-mse otevře editor s původním textem k úpravě. - Zapomenutý soubor: přidejte ho jako obvykle (
git add zapomenuty.js) a spusťtegit commit --amend --no-edit. Soubor se přibalí do posledního commitu a--no-editzachová původní zprávu — žádné otázky navíc. - Funguje to i obráceně: když do commitu omylem přibalíte soubor navíc,
git reset HEAD~ soubor.txtho z posledního commitu vyjme (změny zůstanou v pracovním adresáři) — pak stačí amend. - Zásadní pravidlo: amend přepisuje historii, takže ho používejte jen na commity, které jste ještě neposlali příkazem push. Jakmile je commit na sdíleném serveru a mohli si ho stáhnout kolegové, opravte chybu radši novým commitem.
- Pokud přece jen amendnete už pushnutý commit na své vlastní pracovní větvi, budete muset použít
git push --force-with-lease— a to jen tehdy, když na větvi nepracuje nikdo jiný.
Vzorová situace
Vývojářka commitne úpravu API a vzápětí zjistí, že zapomněla přidat soubor s testem — klasika, protože test leží v jiné složce. Dřív by historie dostala dvojici „úprava API endpointu“ + „přidán zapomenutý test“. Teď: git add tests/api.test.js, git commit --amend --no-edit — a v historii je jeden úplný commit, ve kterém změna a její test žijí pohromadě. Kdokoli si ho v budoucnu zobrazí, vidí celek, ne půlku. Stejný pohyb opakuje během dne ještě dvakrát — jednou kvůli překlepu ve zprávě, jednou kvůli zapomenutému řádku v changelogu — a pokaždé je to otázka pěti vteřin, protože --amend --no-edit má v prstech jako jeden celek.
Co vám to přinese
Z historie zmizí šum commitů „oprava překlepu“ a „zapomněl jsem soubor“, které nikoho nezajímají a při procházení jen překážejí. Každý commit je ucelený, což ocení kolegové při review i vy při budoucím hledání v historii. A drobné přešlapy přestanou být veřejné — opravíte je dřív, než je kdo uvidí. Souvisí s tipem commit zprávy pro budoucí já.
Chcete jít do hloubky? V příručce najdete kapitolu Základní systémy: inbox, priority, revize.
Podobné tipy
Alt+šipky: přesouvejte řádky kódu místo vyjmout a vložit
Alt+↓
Alt+šipka nahoru/dolů posune řádek či blok na nové místo, Shift+Alt+šipka ho zduplikuje. Konec žonglování s Ctrl+X a Ctrl+V.
F2 přejmenuje funkci v celém projektu — bez hledání a nahrazování
F2
Přejmenování symbolu přes F2 změní funkci či proměnnou všude, kde se používá, napříč soubory. Chytřeji než najít a nahradit.
Multi-kurzor: upravte deset řádků najednou
Ctrl+D
Ctrl+D ve VS Code označí další výskyt slova — a píšete na všech místech současně. Refaktoring drobností bez hledání a nahrazování.
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.
E-book Top 30 tipů zdarma — pošlu vám ho hned.
Pak 1 tip týdně · žádný spam · odhlášení jedním klikem
Radši systém než jednotlivé tipy? E-mailový kurz zdarma — sedm dní, sedm e-mailů, každý den jedna dovednost.