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í.

11. diel - Git - Zlučovanie vetiev

V Git tutoriáli 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 repositári.

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 príkazový riadok a pomocou príkazu cd laravel sa do repositára presunieme.

Zlučovanie vetiev

Pre zlučovanie vetiev máme v Gite príkaz git merge, ktorý slúži na integráciu zmien z jednej vetvy do inej, čím sa spojí história oboch vetiev. Tento proces je nevyhnutný najmä pri spolupráci v tíme, keď rôzni členovia pracujú na rôznych vetvách projektu a neskôr sa musí ich práca zlúčiť do hlavného kódu.

Pri použití príkazu git merge <název_větve> sa obsah a zmeny zo zlučovanej vetvy začlenia do cieľovej vetvy. Git sa snaží vykonať zlúčenie automaticky, ak nedochádza ku konfliktom v kóde. Ak však nastanú konflikty, Git upozorní používateľa a umožní im ich ručne vyriešiť.

Konflikty vo vetvách sa budeme zaoberať ďalej v kurze.

Po vykonaní zlúčenia sa vykonané zmeny zo zlučovanej vetvy objavia v cieľovej vetve ako nové commity, ktoré zaznamenajú históriu zlúčenia. Na nasledujúcom obrázku vidíme, ako sa zmení cieľová vetva main po zlúčení s vetvou feature:

Ukážka zlúčenia vetiev - Git

Pred zlúčením vetiev je potrebné potvrdiť prijímajúcu vetvu a načítať najnovšie vzdialené commity.

Potvrdenie prijímajúcej vetvy

Pred zlúčením dvoch vetiev je dôležité zistiť, či sa nachádzame na správnej vetve, do ktorej bude zlúčenie vykonané. Príkazom git status zistíme, či HEAD ukazuje na správnu vetvu prijímajúcu zlúčenie. Pokiaľ sa nachádzame na zlej vetve, použijeme príkaz git checkout <název větve> pre zmenu vetvy.

Načítanie najnovších vzdialených commitov

Ďalej sa musíme uistiť, že cieľová a zlučovacia vetva obsahujú najnovšie commity. Pre aktualizáciu vetiev spustíme príkaz git fetch, čím si stiahneme najnovšie vzdialené commity. Po dokončení načítania sa príkazom git pull uistíme, že cieľová vetva má najnovšie aktualizácie.

Typy zlúčenia

V Gite existujú 2 základné typy zlúčenia, ktoré sa používajú na integráciu zmien z jednej vetvy do druhej. Jedná sa o fast-forward merge a 3-way merge.

Fast-forward merge

Pokiaľ commity cieľovej vetvy nie sú novšie, než commity vetvy zlučované, potom použijeme práve fast-forward merge zlúčenie. História cieľovej vetvy sa jednoducho posunie dopredu na posledný commit zo zlučovanej vetvy. To znamená, že sa zmeny vykonané v zlučovanej vetve pridajú priamo na koniec cieľovej vetvy.

Fast-forward merge zlúčenie môžeme použiť v prípade neexistencie zmien v cieľovej vetve od doby, keď sme sa od nej odštiepili do zlučovanej vetvy.

Na obrázku vidíme stav vetve main a feature pred zlúčením:

Repositár pred fast merge - Git

Po Fast-forward merge budú vetvy vyzerať nasledovne:

Po fast merge - Git
Príklad

Na nasledujúcom príklade si ukážeme zlúčenie dvoch vetiev pomocou fast-forward merge zlúčenia. Najskôr sa prepneme späť do vetvy 10.x:

Vytvoríme si novú testovaciu cieľovú vetvu, do ktorej budeme zlučovať inú vetvu:

Potom vytvoríme budúcu zlučovanú vetvu feature. Do súboru README.md pridáme text Přidaný text 1. Zmeny v súbore README.md pridáme do staging area a commitneme. Potom do súboru README.md pridáme ďalší nový text Přidaný text 2 a podobne použijeme príkazy git add a git commit:

Pracovné priestory vrátane staging area sme preberali v lekcii Git-História a princípy.

Teraz vykonáme zlúčenie vetvy feature do cieľovej vetvy test pomocou fast-forward merge zlúčenie:

Zobrazí sa nám tento výpis vykonaných zmien:

Nakoniec vetvu feature vymažeme:

Týmto sme úspešne vykonali zlúčenie dvoch vetiev do jednej pomocou zlúčenia typu Fast-forward merge. Toto zlúčenie však nie je možné, ak sa vetvy rozchádzajú. Pokiaľ k cieľovej vetve neexistuje lineárna cesta, Git nemá inú možnosť ako ich skombinovať pomocou 3-way merge zlúčenia.

3-way merge

Pokiaľ commity cieľovej vetvy sú novšie ako commity vetvy zlučované, potom použijeme 3-way merge zlúčenie. Toto zlúčenie využijeme, keď sa obe vetvy od okamihu rozvetvenia rozvíjali:

Vetvy pred 3-way merge - Git

Počas tohto procesu Git automaticky detekuje, ktoré časti kódu boli upravené na oboch vetvách od posledného spoločného commitu a snažia sa ich zlúčiť do jedného nového commitu. Ak sa v súboroch nachádzajú konflikty, Git označí tieto miesta a používatelia musia ručne tieto konflikty vyriešiť. Tento proces je trochu zložitejší ako fast-forward merge, pretože vyžaduje manuálne zásahy a kontrolu konfliktov.

Po 3-way merge zlúčení budú vetvy vyzerať nasledovne:

Stav vetva po 3-way merge - Git
Príklad

Na nasledujúcom príklade si ukážeme proces zlúčenia dvoch vetiev pomocou 3-way merge zlúčenia. Máme cieľovú vetvu 10.x, od ktorej sa odštiepime do budúcej zlučovanej vetvy feature. V tejto vetve potom pracujeme. Medzitým však náš kolega vytvára zmeny v cieľovej vetve 10.x

Tento scenár sa často vyskytuje pri implementácii rozsiahlych funkcií alebo pri súčasnej práci niekoľkých vývojárov na rovnakom projekte.

Začneme presunom do cieľovej vetvy 10.x a vytvorením novej budúcej zlučovanej vetvy feature:

Teraz pracujeme v našej vetve feature. Do súboru README.md podobne pridáme nové texty a každú zmenu pridáme do staging area aj lokálneho repositára:

Teraz budeme simulovať súčasnú prácu nášho kolegu v cieľovej vetve 10.x Do súboru CHANGELOG.md vložíme text Přidaný text do souboru a zmenu pridáme do staging area aj lokálneho repositára:

Teraz vykonáme zlúčenie vetvy feature do cieľovej vetvy 10.x:

Otvorí sa nám zlučovací súbor. Do neho by sme mohli pridať odôvodnenie zlúčenia vetiev. My tento súbor len zatvoríme stlačením klávesy Esc. Potom napíšeme príkaz :wq, čím uložíme súbor a ukončíme editor. Vypíše sa nám nasledujúca správa o vykonaných zmenách zlúčenia:

Týmto sme úspešne pomocou 3-way merge zlúčili vetvu feature do vetvy 10.x


 

Predchádzajúci článok
Git - GitHub Desktop
Všetky články v sekcii
Git
Článok pre vás napísal Filip Studený
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
.
Aktivity