Možnosť Git Merge –no-ff

Git Merge No Ff Option



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..9ee88eb
Rý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 --oneline
9ee88eb 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 --oneline
e071527 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.

Ďalšie štúdium:

Referencie: