Možnost Git Merge –no-ff

Git Merge No Ff Option

Schopnost snadného sloučení git je jednou z jeho silných stránek. Během sloučení git používá rychlé sloučení vpřed, když si všimne, že HEAD aktuální větve je předchůdcem potvrzení, které se pokoušíte sloučit. Při rychlém sloučení neexistuje žádné nové potvrzení. Git jen pohybuje ukazatelem. Pokud toto chování není žádoucí, můžete použít příznak no-ff k vytvoření nového potvrzení pro sloučení.

Jak vypadá sloučení vpřed a bez

Po rychlém převíjení vpřed bude vaše historie git vypadat takto:



C0 -> C1 -> C2—> C3



Pro stejný počet odevzdání je zde historie sloučení bez rychlého převíjení:



V prvním případě nic nenasvědčuje tomu, že by došlo k rozvětvení. V druhém případě historie ukazuje potvrzení C4, které označuje, kde došlo ke sloučení.

Procházka příkladem

Vytvoříte úložiště git, vytvoříte větev a poté zkusíte sloučení s rychlým převíjením a bez něj.



Část 1: Nastavení

Nejprve můžete úložiště git vytvořit pomocí následujících kroků:

$ mkdir můj_projekt
$ cd můj_projekt
$ git init
$ touch a.txt
$ git add -A
$ git commit -m 'C0: Přidání a.txt'

Nyní vytvoříme větev s názvem funkce a provedeme několik změn:

Funkce $ git branch
$ git funkce pokladny
$ touch b.txt
$ git add -A
$ git commit -m 'C1: Přidání souboru b.txt'
$ touch c.txt
$ git add -A
$ git commit -m 'C2: Přidání c.txt'
$ touch d.txt
$ git add -A
$ git commit -m 'C3: Přidání d.txt'

Část 2: Sloučení s rychlým přesměrováním

Vraťme se k hlavní větvi a sloučíme do ní větve funkcí:

$git pokladnamistr
$git sloučitfunkce

Výstup:

Aktualizace 08076fb..9ee88eb
Rychle vpřed
b.txt | 0
c.txt | 0
d.txt | 0
3 soubory změněny, 0 vložení (+), 0 odstranění (-)
vytvořit režim 100644 b.txt
vytvořit režim 100644 c.txt
vytvořit režim 100644 d.txt

Pokud zkontrolujete historii, uvidíte:

$ git log --oneline
9ee88eb C3: Přidání d.txt
c72b92c C2: Přidání souboru c.txt
2e4039e C1: Přidání souboru b.txt
08076fb C0: Přidání souboru a.txt

Takže všechny závazky z větve features jsou nyní v hlavní větvi. Pokud budete pokračovat v provádění změn v předloze, nebude možné zjistit, kdy byla do ní sloučena větev funkcí.

Část 3: Bez rychlého převíjení

Opakujte část 1 pro novou složku.

Potom zkuste sloučení bez rychlého přeposílání:

$git pokladnamistr
$git sloučit --no-ffVlastnosti

Ve výchozím textovém editoru vašeho git se otevře následující:

Sloučit větev'funkce'
# Zadejte prosím potvrzovací zprávu, abyste vysvětlili, proč je toto sloučení nutné,
# zvláště pokud sloučí aktualizovaný upstream do větve tématu.
#
# Řádky začínající na# budou ignorovány a prázdná zpráva se přeruší
# závazek.

Upravte komentáře. V tomto případě stačí přidat C4: before 'Merge branch ‘features’. Výstup by měl vypadat takto:

Sloučení provedené pomocí „rekurzivní“ strategie.
b.txt | 0
c.txt | 0
d.txt | 0
3 soubory změněny, 0 vložení (+), 0 odstranění (-)
vytvořit režim 100644 b.txt
vytvořit režim 100644 c.txt
vytvořit režim 100644 d.txt

Pokud zkontrolujete historii, měla by vypadat takto:

$ git log --oneline
e071527 C4: Sloučit větev 'funkce'
bb79c25 C3: Přidání souboru d.txt
692bd8c C2: Přidání souboru c.txt
a0df62a C1: Přidání souboru b.txt
7575971 C0: Přidání souboru a.txt

Vidíte, že i když máte přesně stejné změny, tato verze sloučení má navíc potvrzení C4, což znamená sloučení větve features do master.

Závěr

Příznak git merge no-ff pomáhá vytvářet čitelnější historii. Umožňuje vám vložit značky, které jasně ukazují, kde ke sloučení došlo. Při ladění vám může ušetřit čas a úsilí.

Další studie:

Reference: