Pochopenie možnosti Git Merge no-ff
Jednou z jeho silných stránok je schopnosť ľahkého zlúčenia git. Počas zlúčenia git použije zlúčenie rýchlo dopredu, keď si všimne, že HEAD aktuálnej vetvy je predchodcom potvrdenia, ktoré sa pokúšate zlúčiť. Pri zlúčení rýchlo dopredu nie je potrebné nové potvrdenie. Git iba posúva ukazovateľ. Ak toto správanie nie je žiaduce, môžete pomocou príznaku no-ff vytvoriť nové potvrdenie pre zlúčenie.
Ako vyzerá zlúčenie rýchlo a dopredu a bez neho
Po rýchlom prechode dopredu bude vaša história systému git vyzerať takto:
C0 -> C1 -> C2-> C3
Pri rovnakom počte záväzkov je tu aj história zlúčenia bez pretáčania dopredu:
V prvom prípade nič nenasvedčuje tomu, že by došlo k nejakému rozvetveniu. V druhom prípade história zobrazuje záväzok C4, ktorý indikuje, kde došlo k zlúčeniu.
Prechádzka príkladom
Vytvoríte úložisko git, vytvoríte vetvu a potom vyskúšate zlúčenie s rýchlym posunom dopredu a bez neho.
Oddiel 1: Nastavenie
Najskôr môžete vytvoriť úložisko git pomocou nasledujúcich krokov:
$ mkdir môj_projekt$ cd môj_projekt
$ git init
$ dotyk a.TXT
$ git pridať -A
$ git commit -m "C0: Pridanie a.TXT"
Teraz vytvorme vetvu nazvanú funkcie a urobme niekoľko zmien:
$ git funkcie pobočkyFunkcie pokladnice $ git
$ dotyk b.TXT
$ git pridať -A
$ git commit -m "C1: Pridanie b.TXT"
$ dotyk c.TXT
$ git pridať -A
$ git commit -m "C2: Pridanie c.TXT"
$ dotyk d.TXT
$ git pridať -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ňa, majsterFunkcie $ git merge
Výkon:
Aktualizuje sa 08076fb… 9ee88ebRýchlo vpred
b.txt | 0
c.txt | 0
d.txt | 0
3 súbory zmenené, 0 vložení (+), 0 odstránení (-)
režim vytvorenia 100644 b.TXT
režim vytvorenia 100644 c.TXT
režim vytvorenia 100644 d.TXT
Ak skontrolujete históriu, uvidíte:
$ git log - online9ee88eb C3: Pridanie d.TXT
c72b92c C2: Pridanie c.TXT
2e4039e C1: Pridanie b.TXT
08076fb C0: Pridanie a.TXT
Takže všetky potvrdenia z vetvy funkcií sú teraz v hlavnej vetve. Ak budete pokračovať v zmenách v predlohe, neexistuje žiadny spôsob, ako zistiť, kedy bola do nej zlúčená vetva funkcií.
Oddiel 3: Bez rýchleho preposielania
Zopakujte časť 1 pre nový priečinok.
Potom vyskúšajte zlúčenie bez rýchleho preposielania:
$ git pokladňa, majster$ git merge --no-ff funkcia
V predvolenom textovom editore vášho gitu sa otvorí toto:
Zlúčiť vetvu 'funkcie'# Zadajte správu na potvrdenie, aby ste vysvetlili, prečo je toto zlúčenie potrebné,
# najmä ak zlúči aktualizovaný upstream do tematickej vetvy.
#
# 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 „Funkcie zlúčenia vetvy“ “. Výstup by mal vyzerať takto:
Zlúčenie uskutočnené pomocou „rekurzívnej“ stratégie.b.txt | 0
c.txt | 0
d.txt | 0
3 súbory zmenené, 0 vložení (+), 0 odstránení (-)
režim vytvorenia 100644 b.TXT
režim vytvorenia 100644 c.TXT
režim vytvorenia 100644 d.TXT
Ak teraz skontrolujete históriu, mala by vyzerať takto:
$ git log - onlinee071527 C4: Zlúčiť vetvu 'vlastnosti'
bb79c25 C3: Pridanie d.TXT
692bd8c C2: Pridanie c.TXT
a0df62a C1: Pridanie b.TXT
7575971 C0: Pridanie a.TXT
Vidíte, že aj keď máte úplne rovnaké zmeny, táto verzia zlúčenia má extra potvrdenie C4, ktoré znamená zlúčenie vetvy funkcií do hlavnej.
Záver
Príznak git merge no-ff pomáha vytvárať čitateľnejšiu históriu. Umožňuje vám umiestniť značky, ktoré jasne ukazujú, kde došlo k zlúčeniu. Môže vám to ušetriť čas a úsilie pri ladení.
Ďalšie štúdium:
- https: // git-scm.com / docs / git-merge
Referencie:
- Stack Overflow: what-is-the-difference-between-git-merge-and-git-merge-no-ff
- https: // www.atlassian.com / git / tutoriály / using-pobočky / git-merge