Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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 jimi zabýváme a co nám do vývoje přinášejí. Ukážeme si, jak se s větvemi pracuje.

Zase si všechny příkazy budeme zkoušet v našem naklonovaném repositáři Laravel z lekce Git - Základy - Dokončení. Otevřeme terminál MinTTY a pomocí příkazu cd laravel se do repositář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 které 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:

Větvení projektu - Git

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 ji můžeme 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 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 repositáři slouží příkaz git branch. My si ho teď vyzkoušíme v našem repositáři laravel. Příkazem git branch vypíšeme seznam všech větví v repositář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 repositář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)
$

* značí, na které větvi se nacházíme

A nakonec si zobrazme pouze větve ze vzdáleného ulož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, každá větev má 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, tak 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áš repositář 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 repositář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 u 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 a Git nás automaticky přepne na tuto větev.

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ínaní větví

Příkaz git checkout umožňuje vývojářům rychle přepínat mezi existujícími větvemi v repositář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 repositář, 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 4 commity a může být rychle posunuta dopředu. A dále abychom aktualizovali náš lokální repositář 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 ulož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ázvem 3.0,
  • branch 3.0 set up to track origin/3.0 - naše lokální větev 3.0 sleduje vzdálenou větev origin/3.0.

Přesvědčme se o úspěšném stáhnutí větve 3.0 ze vzdáleného repositář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 ulož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 uložišti> origin/<název větve na vzdáleném ulož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.


 

Předchozí článek
Git - Zkoumání historie - Dokončení
Všechny články v sekci
Git
Přeskočit článek
(nedoporučujeme)
Git - Slučování větví
Článek pro vás napsal Patrik Valkovič
Avatar
Uživatelské hodnocení:
262 hlasů
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Aktivity