Schopnosť jednoduchého zlúčenia git je jednou z jeho silných stránok. Pri zlučovaní git používa rýchle zlúčenie dopredu, keď si všimne, že HEAD aktuálnej vetvy je predchodcom potvrdenia, ktoré sa pokúšate zlúčiť. Pri rýchlom zlúčení dopredu nedochádza k žiadnemu novému potvrdeniu. Git iba pohybuje ukazovateľom. Ak toto správanie nie je žiaduce, môžete použiť príznak no-ff na vytvorenie nového potvrdenia pre zlúčenie.
Ako vyzerá zlúčenie dopredu a dozadu
Po rýchlom pretočení bude vaša história git vyzerať takto:
C0 -> C1 -> C2—> C3
Pre rovnaký počet potvrdení je tu história zlúčenia bez rýchleho prevíjania vpred:
V prvom prípade nič nenasvedčuje tomu, že by došlo k rozvetveniu. V druhom prípade história ukazuje potvrdenie C4, ktoré naznačuje, kde došlo k zlúčeniu.
Prechádzka príkladom
Vytvoríte úložisko git, vytvoríte vetvu a potom sa pokúsite o zlúčenie s rýchlym prevíjaním dopredu a bez neho.
Časť 1: Nastavenie
Najprv môžete vytvoriť úložisko git pomocou nasledujúcich krokov:
$ mkdir môj_projekt$ cd môj_projekt
$ git init
$ touch a.txt
$ git add -A
$ git commit -m 'C0: Pridávanie a.txt'
Teraz vytvoríme vetvu s názvom funkcie a vykonáme niekoľko zmien:
funkcie pobočky $ git$ git funkcie pokladne
$ touch b.txt
$ git add -A
$ git commit -m 'C1: Pridanie súboru b.txt'
$ touch c.txt
$ git add -A
$ git commit -m 'C2: Pridanie c.txt'
$ touch d.txt
$ git add -A
$ git commit -m 'C3: Pridanie d.txt'
Oddiel 2: Zlúčenie s rýchlym preposielaním
Vráťme sa k hlavnej vetve a zlúčime do nej vetvu funkcií:
$git pokladňamajster$git zlúčiťVlastnosti
Výkon:
Aktualizuje sa 08076fb..9ee88ebRýchlo vpred
b.txt | 0
c.txt | 0
d.txt | 0
3 zmenené súbory, 0 vložení (+), 0 vymazaní (-)
režim vytvorenia 100644 b.txt
režim vytvorenia 100644 c.txt
režim vytvorenia 100644 d.txt
Keď si pozriete históriu, uvidíte:
$ git log --oneline9ee88eb C3: Pridanie súboru d.txt
c72b92c C2: Pridanie súboru c.txt
2e4039e C1: Pridanie súboru b.txt
08076fb C0: Pridávanie súboru a.txt
Takže všetky potvrdenia z vetvy funkcií sú teraz v hlavnej vetve. Ak budete pokračovať v zmenách v predlohe, nebude možné zistiť, kedy bola vetva funkcií do nej zlúčená.
Časť 3: Bez rýchleho prevíjania
Zopakujte časť 1 pre nový priečinok.
Potom skúste zlúčiť bez rýchleho prevíjania dopredu:
$git pokladňamajster$git zlúčiť --no-fffunkcia
Vo vašom predvolenom textovom editore git sa otvorí nasledovné:
Zlúčiť pobočku'Vlastnosti'# Zadajte správu o potvrdení, aby ste vysvetlili, prečo je toto zlúčenie nevyhnutné,
# obzvlášť ak zlučuje aktualizovaný prúd do vetvy témy.
#
# Riadky začínajúce sa## budú ignorované a prázdna správa sa preruší
# spáchať.
Upravte komentáre. V takom prípade stačí pridať C4: pred zlúčením „funkcií“ vetvy. Výstup by mal vyzerať takto:
Zlúčenie uskutočnené podľa „rekurzívnej“ stratégie.b.txt | 0
c.txt | 0
d.txt | 0
3 zmenené súbory, 0 vložení (+), 0 vymazaní (-)
režim vytvorenia 100644 b.txt
režim vytvorenia 100644 c.txt
režim vytvorenia 100644 d.txt
Ak teraz skontrolujete históriu, malo by to vyzerať takto:
$ git log --onelinee071527 C4: Zlúčiť „funkcie“ vetvy
bb79c25 C3: Pridávanie súboru d.txt
692bd8c C2: Pridanie súboru c.txt
a0df62a C1: Pridanie súboru b.txt
7575971 C0: Pridávanie súboru a.txt
Vidíte, že aj keď máte úplne rovnaké zmeny, táto verzia zlúčenia má navyše potvrdenie C4, čo znamená zlúčenie vetvy funkcií do predlohy.
Záver
Príznak git merge no-ff pomáha vytvárať čitateľnejšiu históriu. Umožňuje vám vložiť značky, ktoré jasne ukazujú, kde došlo k zlúčeniu. Pri ladení vám môže ušetriť čas a námahu.