7. diel - Git - Správa vetiev
V minulej 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 Git tutoriále sa budeme zaoberať vetvením. Vysvetlíme si, prečo sa nimi zaoberáme a čo nám do vývoja prinášajú. Ukážeme si, ako sa s vetvami pracuje.
Zase si všetky príkazy budeme skúšať v našom naklonovanom
repositári Laravel z lekcie Git – Základy –
Dokončenie. Otvoríme terminál MinTTY
a pomocou príkazu
cd laravel
sa do repositára presunieme.
Č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 na iných vetvách. 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](images/6863/git/vetve/git-branch.png)
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 Gitu 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 na hlavnom vývojovom strome.
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 iba testovaný a overený kód je začlenený do hlavného vývoja.
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áciou zmien do vetiev umožňuje vývojárom pracovať nezávisle na sebe 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
Pre správu vetví v Gite je 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 repositári slúži príkaz
git branch
. My si ho teraz vyskúšame v našom repositári
laravel
. Príkazom git branch
vypíšeme zoznam
všetkých vetiev v repositá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, tentoraz však vrátane vetiev na
vzdialenom repositári. Na to slúži atribút -a
alebo
--all
. Zadajme teda príkaz git branch --all
, čím
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) $
*
značí, 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
Pokiaľ náš repositá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 repositá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 automaticky prepne na túto vetvu.
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 založenie 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 repositá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 repositá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. A ďalej aby sme aktualizovali náš lokálny
repositá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.0
sleduje vzdialenú vetvuorigin/3.0
.
Presvedčme sa o úspešnom stiahnutí vetvy 3.0
zo vzdialeného
repositá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.