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:

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ázvom3.0,branch 3.0 set up to track origin/3.0- naša lokálna vetva3.0sleduje vzdialenú vetvuorigin/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.
