Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

7. diel - Git - Správa vetiev

V predchádzajúcej lekcii, Git - Skúmanie histórie - Dokončenie, sme dokončili skúmanie histórie. Zaoberali sme sa zoznamom všetkých vetiev, detailmi commitu, sledovaním a odstránením vykonaných zmien.

V dnešnom tutoriáli Gite sa budeme zaoberať vetvením. Vysvetlíme si, prečo sa tým zaoberáme a čo nám to do vývoja prináša. Ukážeme si, ako sa s vetvami pracuje.

Všetky príkazy si znova budeme skúšať v našom naklonovanom repozitári Laravel z lekcie Git – Základy – Dokončenie. Otvoríme terminál MinTTY a pomocou príkazu cd laravel presunieme sa do repozitára.

Čo je to vetva

Vetvy sú jedným z najdôležitejších konceptov v Gite. V Gite sú vetvy vytvárané pre oddelenie vývoja od hlavného vývojového stromu projektu. Každá vetva predstavuje samostatný vývojový smer, v ktorej môžeme vykonávať zmeny nezávisle od iných vetiev. To umožňuje rôznym členom tímu pracovať na rôznych funkciách alebo opravách chýb súčasne bez toho, aby sa navzájom ovplyvňovali.

Vetvy sú iba ukazovatele na commit. Keď vytvoríme vetvu, Git vytvorí nový ukazovateľ. Nemení históriu úložiska.

Nasledujúci obrázok ukazuje, ako jednotlivé vetvy ovplyvňujú vývoj projektu:

Vetvenie projektu - Git

Tento prístup k vývoju softvéru zníži možnosť začlenenia chybového kódu do hlavnej verzie kódovej základne.

V Gite vetva označuje nový bod v histórii projektu. Tento bod obsahuje vlastnú verziu kódu alebo kópiu projektu a vyvíja sa nezávisle od hlavného vývojového stromu.

Typy vetiev

Existujú dve hlavné kategórie vetiev:

  • hlavná vetva,
  • funkčné vetvy.

Vďaka nezávislosti vetiev je možné paralelne pracovať na rôznych funkciách v projekte. Po dokončení zmien je možné vetvu s danou funkciou zlúčiť späť do hlavnej vetvy alebo hlavnej verzie kódu, čím sa nové zmeny integrujú do hlavného vývoja. Týmto spôsobom je zaistené, že do hlavného vývoja je začlenený iba testovaný a overený kód.

Hlavná vetva

Predvolená, alebo hlavná vetva, predstavuje stabilnú verziu projektu. Väčšinou sa nazýva Master alebo Main.

Názov hlavnej vetvy je možné nastaviť v inštalátore Gitu alebo ju môžeme premenovať.

Funkčné vetvy

Funkčné vetvy, alebo feature branches, sú vytvárané za účelom implementácie nových funkcií alebo opravy chýb. Po dokončení práce v týchto vetvách môžeme vykonať zlúčenie späť do hlavnej vetvy.

Výhody vetiev

Vetvenie v Gite nám prináša niekoľko kľúčových výhod, ako napríklad:

  • paralelný vývoj,
  • izolácia zmien,
  • experimentovanie,
  • ľahké spravovanie verzií,
  • spätné zlúčenie (Merge).

Tieto výhody prispievajú k efektívnemu a ľahkému vývoju softvérových projektov. Poďme sa na ne pozrieť bližšie.

Paralelný vývoj

Paralelný vývoj umožňuje tímu pracovať na rôznych častiach projektu alebo opravách súčasne. Zvyšuje produktivitu a urýchľuje vývojový cyklus.

Izolácia zmien

Izolácia zmien do vetiev umožňuje vývojárom pracovať nezávisle od seba a izolovať svoje zmeny od ostatných častí projektu. Tým sa minimalizuje riziko konfliktov, ktoré by mohli nastať pri spoločnej práci na rovnakých súboroch. Izolácia zmien tiež zaisťuje, že jedna časť projektu nemôže nechcene narušiť funkčnosť inej časti.

Experimentovanie

Vývoj v experimentálnych vetvách umožňuje vývojárom testovať nové funkcie a nápady bez ohrozenia hlavného vývoja projektu. Experimentovanie v oddelených vetvách dáva vývojárom možnosť iteratívne pracovať na nových funkciách a zároveň udržiavať hlavnú kódovú základňu v stabilnom stave.

Ľahké spravovanie verzií

Vďaka vetvám je možné sledovať kompletnú históriu projektu a ľahko identifikovať, aké zmeny boli vykonané, kto ich vykonal a kedy. Kompletné údaje o histórii projektu:

  • uľahčujú identifikáciu chýb,
  • umožňujú tímu spätne obnoviť predchádzajúce verzie projektu,
  • znižujú riziko straty dát,
  • zaisťujú bezpečnosť projektu.

Spätné zlúčenie (Merge)

Po dokončení prác na vetve je možné vykonať spätné zlúčenie (merge) zmien z tejto vetvy späť do hlavnej vetvy. Táto funkcia umožňuje integrovať novú funkcionalitu alebo opravy chýb do hlavného projektu a zároveň udržať históriu zmien transparentnú a dobre organizovanú.

Spätné zlúčenie je kľúčové pre začlenenie nových funkcií do hlavného produktu a pre udržanie konzistencie a stability projektu.

Správa vetiev

Na správu vetviev je v Gite základným nástrojom príkaz git branch. Pomocou tohto príkazu môžeme vetvy:

  • zobraziť,
  • vytvoriť,
  • premenovať,
  • zmazať.

Zobrazenie vetiev

Na zobrazenie všetkých vetiev v repozitári slúži príkaz git branch. My si ho teraz vyskúšame v našom repozitári laravel. Príkazom git branch vypíšeme zoznam všetkých vetiev v repozitári:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch
* 10.x
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Skúsme si znova zobraziť vetvy, teraz však vrátane vetiev na vzdialenom repozitári. Na to slúži atribút -a alebo --all. Zadajme teda príkaz git branch --all a dostaneme tento výpis:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch --all
* 10.x
  remotes/origin/10.x
  remotes/origin/3.0
  remotes/origin/5.0
  ...
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Znak * označuje, na ktorej vetve sa nachádzame

A nakoniec si zobrazme iba vetvy zo vzdialeného úložiska pomocou atribútu -r alebo --remotes. Zadajme príkaz git branch -r, ktorým sa vypíše nasledujúci zoznam vetiev:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch --remotes
  origin/10.x
  origin/3.0
  origin/5.0
  origin/5.1
  origin/5.2
  ...
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Vytvorenie novej vetvy

Nové vetvy tvoríme príkazom git branch <branch_name>. Rovnako ako commit, každá vetva má vlastný identifikátor alebo hash a unikátny názov. Vytvorme si vetvu s názvom test spustením príkazu git branch test:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch test
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Vytvorili sme novú vetvu s názvom test, ktorá je kópiou hlavnej vetvy 10.x Vetva test obsahuje rovnaké súbory, ako aj rovnakú históriu commitov.

Našu novo vytvorenú vetvu test si zobrazme príkazom git branch, ktorý nám vypíše:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch
* 10.x
  test
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Premenovanie vetvy

Ak chceme premenovať existujúcu vetvu, použijeme príkaz git branch -m <branch_name> <new_branch_name>. Premenujme vetvu test na feature príkazom git branch -m test feature:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch -m test feature
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

A opätovným spustením príkazu git branch si overme premenovanie vetvy:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch
* 10.x
  feature
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Zmazanie vetvy

Ak náš repozitár obsahuje vetvy, ktoré už nepotrebujeme, môžeme ich zmazať príkazom git branch -d <branch_name>. Zmažme teda našu vetvu feature príkazom git branch -d feature, ktorý nám oznámi odstránenie vetvy:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch -d feature
Deleted branch feature (was 7fe97a16).
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Zmazanie vetvy si overme príkazom git branch, ktorý vráti nasledujúci výstup:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git branch
* 10.x
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Vetvy na vzdialenom repozitári by sme odstránili príkazom git push origin --delete <branch_name>.

Prepínanie medzi vetvami

Pri práci na projekte môžeme mať rôzne vývojové vetvy. Príkaz git checkout <branch_name> nám umožňuje ľahko prepínať medzi týmito vetvami. Pri prepnutí na inú vetvu sa nám pracovný priestor automaticky aktualizuje na poslednú verziu danej vetvy.

Je dôležité mať na pamäti, že príkaz git checkout môže prepísať existujúce zmeny v pracovnom adresári. Pri použití tohto príkazu je potrebné starostlivo sledovať výstupy a vykonávať zálohy, aby sme minimalizovali riziko straty dát.

Vytvorenie novej vetvy

Rovnako ako pri príkaze git branch, môžeme nové vetvy zakladať aj príkazom git checkout. Pomocou príkazu git checkout -b <new_branch_name>, vytvoríme novú vetvu a Git nás na túto vetvu automaticky prepne.

Teraz vytvoríme novú vetvu s názvom prod príkazom git checkout -b prod:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git checkout -b prod
Switched to a new branch 'prod'

IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (prod)
$

Overme si vytvorenie vetvy prod príkazom git branch, ktorý nám vypíše:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (prod)
$ git branch
  10.x
* prod
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (prod)
$

Prepínanie vetiev

Príkaz git checkout umožňuje vývojárom rýchlo prepínať medzi existujúcimi vetvami v repozitári príkazom git checkout <branch_name>. Tým je možné ľahko pracovať na rôznych častiach projektu a integrovať nové zmeny do hlavnej vetvy.

Teraz sa prepneme späť do vetvy 10.x príkazom git checkout 10.x:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/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)

IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$

Podľa toho, kedy sme naklonovali repozitár, môžeme naraziť na nasledujúce varovania:

MINGW64:/c/mygit/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 varovanie naznačuje, že naša lokálna vetva 10.x zaostáva za vzdialenou vetvou origin/10.x o 4 commity a môže byť rýchlo posunutá dopredu. Ďalej nám varovanie hovorí, aby sme aktualizovali náš lokálny repozitár príkazom git pull. Tento príkaz si vysvetlíme neskôr a teraz ho nepoužijeme.

Obnovenie súborov

Na obnovenie súborov do stavu z predchádzajúcich commitov alebo vetiev slúži príkaz git checkout <branch_name> -- <file_name>.

Prezeranie vetiev zo vzdialených úložísk

Pri práci s tímom je bežné používať vzdialené úložiská. Každé vzdialené úložisko môže obsahovať vlastné vetvy. Obsah týchto vetiev načítame príkazom git fetch --all.

Povedzme, že si chceme pozrieť vetvu 3.0. Po zadaní príkazu git checkout 3.0 sa nám vypíše nasledujúce potvrdenie:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (10.x)
$ git checkout 3.0
Switched to a new branch 3.0
branch 3.0 set up to track origin/3.0.

IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (3.0)
$

Tento výstup nám hovorí:

  • Switched to a new branch 3.0 - prešli sme na novú vetvu s názvom 3.0,
  • branch 3.0 set up to track origin/3.0 - naša lokálna vetva 3.0 sleduje vzdialenú vetvu origin/3.0.

Presvedčme sa o úspešnom stiahnutí vetvy 3.0 zo vzdialeného repozitára príkazom git branch, ktorý nám zobrazí zoznam všetkých vetiev:

MINGW64:/c/mygit/laravel
IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (3.0)
$ git branch
  10.x
* 3.0
  prod

IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit/laravel (3.0)
$

Novšie verzie systému Git umožňujú prezerať vzdialené vetvy ako miestne vetvy príkazom git checkout <remote_repository_branch_name>. V starších verziách Gitu musíme vytvoriť novú vetvu založenú na vzdialenej vetve príkazom git checkout <new_branch_name> origin/<remote_repository_branch_name>.

V budúcej lekcii, Git - Zlučovanie vetiev, sa budeme zaoberať zlučovaním vetiev. Preberieme si typy zlúčenia fast-forward merge a 3-way merge, ktoré si vyskúšame na našom repozitári.


 

Predchádzajúci článok
Git - Skúmanie histórie - Dokončenie
Všetky články v sekcii
Git
Preskočiť článok
(neodporúčame)
Git - Zlučovanie vetiev
Článok pre vás napísal Patrik Valkovič
Avatar
Užívateľské hodnotenie:
225 hlasov
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Aktivity