Lekce 7 - Git - Správa větví
V minulé lekci, Git - Zkoumání historie - Dokončení, jsme dokončili zkoumání historie. Zabývali jsme se seznamem všech větví, detaily commitu, sledováním a odstraněním provedených změn.
V dnešním Git tutoriálu se budeme zabývat větvením. Vysvětlíme si, proč se větvemi zabýváme a co nám do vývoje přinášejí. Ukážeme si, jak se s větvemi pracuje.
Všechny příkazy si opět budeme zkoušet v našem
naklonovaném repozitáři laravel
z lekce Git - Základy -
Dokončení. Otevřeme terminál MinTTY
a pomocí příkazu
cd laravel
se do repozitáře přesuneme.
Co je to větev
Větve jsou jedním z nejdůležitějších konceptů v Gitu. V Gitu jsou větve vytvářeny pro oddělení vývoje od hlavního vývojového stromu projektu. Každá větev představuje samostatný vývojový směr, v němž můžeme provádět změny nezávisle na jiných větvích. To umožňuje různým členům týmu pracovat na různých funkcích nebo opravách chyb současně, aniž by se navzájem ovlivňovali.
Větve jsou pouze ukazatele na commit. Když vytvoříme větev, Git vytvoří nový ukazatel. Nemění historii úložiště.
Následující obrázek ukazuje, jak jednotlivé větve ovlivňují vývoj projektu:
Tento přístup k vývoji softwaru sníží možnost začlenění chybového kódu do hlavní verze kódové základny.
V Gitu větev označuje nový bod v historii projektu. Tento bod obsahuje vlastní verzi kódu neboli kopii projektu a vyvíjí se nezávisle na hlavním vývojovém stromu.
Typy větví
Existují dvě hlavní kategorie větví:
- hlavní větev,
- funkční větve.
Díky nezávislosti větví lze paralelně pracovat na různých funkcích v projektu. Po dokončení změn je možné větev s danou funkcí sloučit zpět do hlavní větve nebo hlavní verze kódu, čímž se nové změny integrují do hlavního vývoje. Tímto způsobem je zajištěno, že pouze testovaný a ověřený kód je začleněn do hlavního vývoje.
Hlavní větev
Výchozí neboli hlavní větev představuje stabilní verzi projektu.
Většinou se nazývá Master
nebo Main
.
Název hlavní větve lze nastavit v instalátoru Gitu nebo jej lze přejmenovat.
Funkční větve
Funkční větve neboli feature branches jsou vytvářeny za účelem implementace nových funkcí nebo opravy chyb. Po dokončení práce v těchto větvích můžeme provést sloučení zpět do hlavní větve.
Výhody větví
Větvení v Gitu nám přináší několik klíčových výhod, jako například:
- paralelní vývoj,
- izolace změn,
- experimentování,
- snadné spravování verzí,
- zpětné sloučení (merge).
Tyto výhody přispívají k efektivnímu a snadnému vývoji softwarových projektů. Pojďme se na ně podívat blíže.
Paralelní vývoj
Paralelní vývoj umožňuje týmu pracovat na různých částech projektu nebo opravách současně. Zvyšuje produktivitu a urychluje vývojový cyklus.
Izolace změn
Izolací změn do větví umožňuje Git vývojářům pracovat nezávisle na sobě a izolovat své změny od ostatních částí projektu. Tím se minimalizuje riziko konfliktů, které by mohly nastat při společné práci na stejných souborech. Izolace změn také zajišťuje, že jedna část projektu nemůže nechtěně narušit funkčnost jiné části.
Experimentování
Vývoj v experimentálních větvích umožňuje vývojářům testovat nové funkce a nápady bez ohrožení hlavního vývoje projektu. Experimentování v oddělených větvích dává vývojářům možnost iterativně pracovat na nových funkcích a zároveň udržovat hlavní kódovou základnu ve stabilním stavu.
Snadné spravování verzí
Díky větvím je možné sledovat kompletní historii projektu a snadno identifikovat, jaké změny byly provedeny, kdo je provedl a kdy. Kompletní data o historii projektu:
- usnadňují identifikaci chyb,
- umožňují týmu zpětně obnovit předchozí verze projektu,
- snižují riziko ztráty dat,
- zajišťují bezpečnost projektu.
Zpětné sloučení (merge)
Po dokončení prací na větvi je možné provést zpětné sloučení (merge) změn z této větve zpět do hlavní větve. Tato funkce umožňuje integrovat novou funkcionalitu nebo opravy chyb do hlavního projektu a zároveň udržet historii změn transparentní a dobře organizovanou.
Zpětné sloučení je klíčové pro začlenění nových funkcí do hlavního produktu a pro udržení konzistence a stability projektu.
Správa větví
Pro správu větví v Gitu je základním nástrojem příkaz
git branch
. Pomocí tohoto příkazu můžeme větve:
- zobrazit,
- vytvořit,
- přejmenovat,
- smazat.
Zobrazení větví
Pro zobrazení všech větví v repozitáři slouží příkaz
git branch
. My si ho teď vyzkoušíme v našem repozitáři
laravel
. Příkazem git branch
vypíšeme seznam
všech větví v repozitáři:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git branch * 10.x ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Zkusme si znovu zobrazit větve, tentokrát však včetně větví na
vzdáleném repozitáři. K tomu slouží atribut -a
nebo
--all
. Zadejme tedy příkaz git branch --all
, čímž
dostaneme tento výpis:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git branch --all * 10.x remotes/origin/10.x remotes/origin/3.0 remotes/origin/5.0 ... ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Znak *
nám říká, na které větvi se
nacházíme.
A nakonec si zobrazme pouze větve ze vzdáleného úložiště pomocí
atributu -r
nebo --remotes
. Zadejme příkaz
git branch -r
, kterým se vypíše následující seznam
větví:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git branch --remotes origin/10.x origin/3.0 origin/5.0 origin/5.1 origin/5.2 ... ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Vytvoření nové větve
Nové větve tvoříme příkazem
git branch <název větve>
. Stejně jako commit má i každá
větev vlastní identifikátor neboli hash a
unikátní název. Vytvořme si větev s názvem
test
spuštěním příkazu git branch test
:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git branch test ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Vytvořili jsme novou větev s názvem test
, která je kopií
hlavní větve 10.x
. Větev test
obsahuje stejné
soubory i stejnou historii commitů.
Naši nově vytvořenou větev test
si zobrazme příkazem
git branch
, který nám vypíše:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git branch * 10.x test ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Přejmenování větve
Chceme-li přejmenovat existující větev, použijeme příkaz
git branch -m <stara-vetev> <nova-vetev>
. Přejmenujme
větev test
na feature
příkazem
git branch -m test feature
:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git branch -m test feature ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
A opětovným spuštěním příkazu git branch
si ověřme
přejmenování větve:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git branch * 10.x feature ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Smazání větve
Pokud náš repozitář obsahuje větve, které již nepotřebujeme, můžeme
je smazat příkazem git branch -d <název větve>
. Smažme
tedy naši větev feature
příkazem
git branch -d feature
, který nám oznámí odstranění
větve:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git branch -d feature Deleted branch feature (was 7fe97a16). ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Smazání větve si ověřme příkazem git branch
, který
vrátí následující výstup:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git branch * 10.x ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Větve na vzdáleném repozitáři bychom odstranili příkazem
git push origin --delete <název větve>
.
Přepínání mezi větvemi
Při práci na projektu můžeme mít různé vývojové větve. Příkaz
git checkout <název větve>
nám umožňuje snadno
přepínat mezi těmito větvemi. Při přepnutí na jinou větev se nám
pracovní prostor automaticky aktualizuje na poslední verzi dané větve.
Je důležité mít na paměti, že příkaz
git checkout
může přepsat stávající změny v pracovním
adresáři. Při použití tohoto příkazu je třeba pečlivě sledovat
výstupy a provádět zálohy, abychom minimalizovali riziko ztráty dat.
Vytvoření nové větve
Stejně jako v případě příkazu git branch
můžeme nové
větve zakládat také příkazem git checkout
. Pomocí příkazu
git checkout -b <název nové větve>
vytvoříme novou
větev, na kterou nás Git automaticky přepne.
Nyní vytvoříme novou větev s názvem prod
příkazem
git checkout -b prod
:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git checkout -b prod Switched to a new branch 'prod' ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (prod) $
Ověřme si založení větve prod
příkazem
git branch
, který nám vypíše:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (prod) $ git branch 10.x * prod ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (prod) $
Přepínání větví
Příkaz git checkout
umožňuje vývojářům rychle přepínat
mezi existujícími větvemi v repozitáři příkazem
git checkout <nazev_vetve>
. Tím lze snadno pracovat na
různých částech projektu a integrovat nové změny do hlavní větve.
Nyní se přepneme zpět do větve 10.x
příkazem
git checkout 10.x
:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (prod) $ git checkout 10.x Switched to branch '10.x' Your branch is behind 'origin/10.x' by 4 commits, and can be fast-forwarded. (use "git pull" to update your local branch) ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $
Podle toho, kdy jsme naklonovali repozitář, můžeme narazit na následující varování:
MINGW64:/c/mujgit/laravel Switched to branch '10.x' Your branch is behind 'origin/10.x' by 4 commits, and can be fast-forwarded. (use "git pull" to update your local branch)
Toto varování naznačuje, že naše lokální větev 10.x
zaostává za vzdálenou větví origin/10.x
o čtyři commity a
může být rychle posunuta dopředu. Dále nám varování říká, abychom
aktualizovali náš lokální repozitář příkazem git pull
.
Tento příkaz si vysvětlíme později a teď jej nepoužijeme.
Obnovení souborů
Pro obnovení souborů do stavu z předchozích commitů nebo větví
slouží příkaz
git checkout <název_větve> -- <název_souboru>
.
Prohlížení větví ze vzdálených úložišť
Při práci s týmem je běžné používat vzdálená úložiště. Každé
vzdálené úložiště může obsahovat vlastní větve. Obsah těchto větví
načteme příkazem git fetch --all
.
Řekněme, že si chceme prohlédnout větev 3.0
. Po zadání
příkazu git checkout 3.0
se nám vypíše následující
potvrzení:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (10.x) $ git checkout 3.0 Switched to a new branch 3.0 branch 3.0 set up to track origin/3.0. ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (3.0) $
Tento výstup nám říká:
Switched to a new branch 3.0
: Přešli jsme na novou větev s názvem3.0
.branch 3.0 set up to track origin/3.0
: Naše lokální větev3.0
sleduje vzdálenou větevorigin/3.0
.
Přesvědčme se o úspěšném stáhnutí větve 3.0
ze
vzdáleného repozitáře příkazem git branch
, který nám
zobrazí seznam všech větví:
MINGW64:/c/mujgit/laravel ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (3.0) $ git branch 10.x * 3.0 prod ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit/laravel (3.0) $
Novější verze systému Git umožňují prohlížet vzdálené
větve jako místní větve příkazem
git checkout <název větve na vzdáleném úložišti>
. Ve
starších verzích Gitu musíme vytvořit novou větev založenou na vzdálené
větvi příkazem
git checkout <název větve na vzdáleném úložišti> origin/<název větve na vzdáleném úložišti>
.
V příští lekci, Git - Slučování větví, se budeme zabývat slučováním větví. Probereme si typy sloučení fast-forward merge a 3-way merge, které si vyzkoušíme na našem repozitáři.