Porozumění možnosti Git Merge no-ff
Jednou z jeho silných stránek je schopnost snadného sloučení gitu. Během sloučení používá git sloučení rychle 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í není žádný nový závazek. Git jen posune ukazatel. 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í s rychlým posunem vpřed a bez něj
Po rychlém posunu vpřed bude vaše historie git vypadat takto:
C0 -> C1 -> C2-> C3
U stejného počtu závazků je zde historie sloučení bez rychlého převodu vpřed:
V prvním případě nic nenasvědčuje tomu, že by došlo k nějakému rozvětvení. V druhém případě historie zobrazuje potvrzení C4, které indikuje, kde ke sloučení došlo.
Procházka příkladem
Vytvoříte úložiště git, vytvoříte větev a poté vyzkoušíte sloučení sa bez rychlého převodu vpřed.
Část 1: Nastavení
Nejprve můžete vytvořit úložiště git pomocí následujících kroků:
$ mkdir my_project$ cd my_project
$ git init
$ touch a.txt
$ git přidat -A
$ git commit -m "C0: Přidání a.txt "
Nyní vytvořme větev nazvanou funkce a proveďte několik změn:
$ git větev funkceFunkce pokladny $ git
$ touch b.txt
$ git přidat -A
$ git commit -m "C1: Přidání b.txt "
$ touch c.txt
$ git přidat -A
$ git commit -m "C2: Přidání c.txt "
$ touch d.txt
$ git přidat -A
$ git commit -m "C3: Přidání d.txt "
Sekce 2: Sloučit s rychlým přeposíláním
Vraťme se k hlavní větvi a sloučíme do ní větve funkcí:
$ git pokladna master$ git slučovací funkce
Výstup:
Aktualizace 08076fb… 9ee88ebRychle 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 - online9ee88eb C3: Přidání d.txt
c72b92c C2: Přidání c.txt
2e4039e C1: Přidání b.txt
08076fb C0: Přidání a.txt
Takže všechny provize z větve funkcí jsou nyní v hlavní větvi. Pokud budete pokračovat v provádění změn v předloze, neexistuje způsob, jak zjistit, kdy byla do ní sloučena větev funkcí.
Část 3: Bez rychlého přeposílání
Opakujte oddíl 1 pro novou složku.
Pak zkuste sloučit bez rychlého předávání:
$ git pokladna master$ git merge --no-ff funkce
Ve výchozím textovém editoru vašeho git se otevře následující:
Sloučit větev 'funkce'# Zadejte zprávu o potvrzení a vysvětlete, proč je toto sloučení nutné,
# zvláště pokud slučuje aktualizovanou upstream do větve tématu.
#
# Řádky začínající znakem # budou ignorovány a prázdná zpráva se přeruší
# potvrzení.
Upravte komentáře. V tomto případě stačí přidat „C4:“ před „Funkce sloučení větve“ “. Výstup by měl vypadat takto:
Sloučení provedené „rekurzivní“ strategií.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 nyní zkontrolujete historii, měla by vypadat takto:
$ git log - onlinee071527 C4: Sloučit větev 'funkce'
bb79c25 C3: Přidání d.txt
692bd8c C2: Přidání c.txt
a0df62a C1: Přidání b.txt
7575971 C0: Přidání a.txt
Vidíte, že i když máte přesně stejné změny, tato verze sloučení má zvláštní potvrzení C4, které znamená sloučení větve funkcí do hlavní.
Závěr
Příznak git merge no-ff pomáhá vytvořit čitelnější historii. Umožňuje vám umístit značky, které jasně ukazují, kde ke sloučení došlo. To vám může ušetřit čas a námahu během ladění.
Další studie:
- https: // git-scm.com / docs / git-merge
Reference:
- Stack Overflow: what-is-the-difference-between-git-merge-and-git-merge-no-ff
- https: // www.atlassian.com / git / tutoriály / using-větve / git-merge