Tento článek patří do seriálu Jak na git. Ostatní články seriálu:
- Jak na git díl 0 - Co, proč, jak?
- Jak na git - díl 1. - git init, remote, config, clone, add, commit, push
- Jak na git - díl 2. - git status, log, checkout, reset
- Jak na git - díl 3. - git revert, stash, diff, clean
- Jak na git - díl 4. - git pull, git fetch, git branch, git merge
- Jak na git - díl 5. - git tag, git cherry-pick a opravy rozbitého gitu
- Jak na git - díl 6. - git rebase a interaktivní rebase
- Git - přidávání částí souborů do commitu
- Git - tutoriály a návody
Co když je potřeba přidat do commitu pouze část souboru? Vracet v editoru všechny ostatní změny, přidat soubor do staging area a poté udělat vše znova, pěkné určitě není. Naštěstí git na to má nástroje, a rozhodně se to hodí a každý by o této možnosti měl minimálně vědět.
Pro případ neznalosti GITu pomocí příkazové řádky, může být nápomocen seriál Jak na git. Přidávaní jednotlivých řádků i hunků umí také některé nástroje. Nejlépe propracované to má ale rozhodně GitKraken.
Patch - jednotlivé přidávání hunků
Není potřeba žádný kouzelný příkaz, vše se děje pomocí git add. Trik ale spočívá v přepínači -p nebo delší --patch. Git bude zobrazovat jednotlivé hunky (části souboru) a u každého se dá rozhodnout, jestli se přidá do staging area nebo ne.
# Spuštění patch módu git add -p index.html
Při spuštění git okamžitě zobrazí první hunk, a je potřeba vybrat akci, ne u všech možností je na první pohled zřejmé co dělají. Naštěstí zde je možnost vyvolat nápovědu pomocí ?.
Pár základních možností:
- y - přidat hunk do staging area
- n - nepřidávat do staging area
- q - aktuální ani žádný následující se nepřidá a skončí
- d - aktuální ani žádný následující v aktuálním souboru se nepřidá
- s - hunk rozdělí (pokud lze) aktuální hunk na menší - mezi úpravami musí být minimálně 1 volný řádek, jinak rozdělení nelze provést. Lze vidět na screenu níže
- e - ruční editace hunku
Ruční editace hunku
Ruční editace nemusí být zřejmá hned zezačátku, v nápovědě pod hunkem je napsáno jak odebrat jednotlivé typy řádků. Někdy je ale potřeba opravit čísla nahoře mezi @@ a @@, což může být problém. V novějších verzích gitu ale již tato akce mnohdy není potřeba.
Pokud je tedy vybrána ruční editace, tj volba e, uživatel může určovat, které řádky chce přidat a které nepřidat, do staging area.
Pokud je řádek označen znakem – (mínus), v souboru byl, ale bude odebrán. Pokud se nemá odstranit, znak – se přepíše na " " (mezera). Nestačí znak smazat, musí se i vložit mezera.
Pokud je řádek označek znakem +, v souboru je nově a bude přidán. Pokud přidán být nemá, musí se smazat celý řádek. Pozor na mazání pouze řádku, ničeho jiného v okolí.
V příkladu na screenu níže zůstane v kódu jak jquery, tak libraries skript. Navíc se ještě neodstraní volání funkcní pro staré IE a ani logování do console se nepřidá do staging area. Na screenu je upraven i číselný diff zápis v záhlaví, i když by potřeba měnit tyto čísla nebyla.
Jak na změnu rozsahu diff zápisu
Jak je zmíněno, v novějších verzích gitu není potřeba toto záhlaví měnit. Pokud ale přidání hunku selže, a není to z důvodu překlepu, bude nutné trochu čísla upravit.
# Rozsah diff zápisu @@ -A,B +C,D @@ # A - na kterém řádku v souboru před úpravou hunk začíná # B - kolik řádků ze souboru před úpravou hunk obsahuje # C - na kterém řádku v souboru po úpravě hunk začíná # D - kolik řádků ze souboru po úpravě hunk obsahuje
Určení hodnot je asi nejjednodušší spočtením. Do původního počtu řádků se počítají řádky začínající " " (mezera) a – (mínus), do počtu řádků po úpravě se počítají řádky začínající " " a + (plus). Začínající řádky pak porovnat se souborem.
Rušení změn
Stejně jako přepínač -p funguje u příkazu git add, funguje také u git checkout a git reset. To může být užitečné, pokud je potřeba zrušit, nebo vrátit změny, pouze v části souboru.
git checkout -p index.html git reset -p a5fb732 index.html
Interaktivní mód
Interaktivní mód je rozšíření pro příkaz git add k rychlejší práci se soubory. Prvně se vybere akce, která se má provést. Poté se jednoduše čísly označují soubory, se kterými se má daná akce provést. Pro ukončení se stiskne enter, když je řádek prázdný a git vybranou akci provede pro vybrané soubory. Velmi užitečný příkaz, který může některé akce velmi urychlit.
# Spuštění interaktivního módu git add -i
Zkušenosti, tipy, rady, to vše můžete sdílet v komentářích...
K tomuto článku již není možné přidávat další komentáře
Komentáře
Nezkoušel jsi to náhodou i v SourceTree?
No když jsi to teď zmínil, tak jsem to zkusil a lze to. Když začneš označovat řádky (Windows s CTRL pro označení více), tak se ti tlačítko Stage hunk změní na Stage lines.
Viz screen: https://www.kutac.cz/image/sourcetree-stage-lines-07908.png