Git Merge –no-ff Option

Git Merge No Ff Option



A git könnyű egyesítési képessége az egyik erőssége. Az egyesítés során a git gyors előretekerést használ, amikor észreveszi, hogy az aktuális ág HEAD az egyesíteni kívánt kötelezettségvállalás őse. Gyors előretekerés esetén nincs új kötelezettségvállalás. Git csak mozgatja a mutatót. Ha ez a viselkedés nem kívánatos, akkor a no-ff jelző használatával új véglegesítést hozhat létre az egyesítéshez.

Hogyan néz ki az egyesítés gyors előretekeréssel és anélkül

Gyors előretekerés után a git története így fog kinézni:







C0 -> C1 -> C2 -> C3



Ugyanezen számú kötelezettségvállaláshoz itt található az egyesítési előzmények gyors előretekerés nélkül:







Az első esetben nincs jele annak, hogy elágazás történt volna. A második esetben a történelem egy C4 kötelezettségvállalást mutat, amely jelzi, hogy hol történt az egyesítés.

Séta egy példán keresztül

Létrehoz egy git adattárat, létrehoz egy ágat, majd megpróbálja az egyesítést gyors előretekeréssel és anélkül.



1. szakasz: Beállítás

Először a következő lépésekkel hozhatja létre a git adattárat:

$ mkdir my_project
$ cd my_project
$ git init
$ touch a.txt
$ git add -A
$ git bind -m 'C0: a.txt hozzáadása'

Most hozzunk létre egy funkcióknak nevezett ágat, és hajtsunk végre néhány módosítást:

$ git ág jellemzői
$ git fizetési funkciók
$ touch b.txt
$ git add -A
$ git bind -m 'C1: b.txt hozzáadása'
$ touch c.txt
$ git add -A
$ git bind -m 'C2: c.txt hozzáadása'
$ touch d.txt
$ git add -A
$ git bind -m 'C3: d.txt hozzáadása'

2. szakasz: Egyesítés a gyorstovábbítással

Térjünk vissza a főághoz, és egyesítsük a funkciókat:

$git pénztárfő-
$git egyesüljellemzők

Kimenet:

Frissítés: 08076fb..9ee88eb
Előrepörgetés
b.txt | 0
c.txt | 0
d.txt | 0
3 fájl módosítva, 0 beillesztés (+), 0 törlés (-)
létrehozási mód 100644 b.txt
létrehozási mód 100644 c.txt
létrehozási mód 100644 d.txt

Ha megnézi az előzményeket, látni fogja:

$ git log -oneline
9ee88eb C3: d.txt hozzáadása
c72b92c C2: c.txt hozzáadása
2e4039e C1: b.txt hozzáadása
08076fb C0: a.txt hozzáadása

Tehát a jellemzők ágból származó összes elkötelezettség a mesterágazatban van. Ha folytatja a mester módosításait, akkor nem lehet tudni, hogy a funkciók ág mikor lett egyesítve.

3. szakasz: Gyorstovábbítás nélkül

Ismételje meg az 1. szakaszt egy új mappához.

Ezután próbálja meg az egyesítést gyors előretekerés nélkül:

$git pénztárfő-
$git egyesül --no-fffunkció

A következőket fogja megnyitni a git alapértelmezett szövegszerkesztőjében:

Fiók egyesítése'jellemzők'
# Kérjük, írjon be egy véglegesítési üzenetet, hogy elmagyarázza, miért szükséges ez az egyesítés,
# különösen, ha egy frissített upstream -t egyesít egy témaágba.
#
# A '#' betűvel kezdődő sorokat figyelmen kívül hagyja, és az üres üzenet megszakad
# az elkötelezettség.

Módosítsa a megjegyzéseket. Ebben az esetben csak hozzáadhatja a C4 -et: az ág „jellemzői” egyesítése előtt. A kimenetnek így kell kinéznie:

Az egyesítés a „rekurzív” stratégia alapján történt.
b.txt | 0
c.txt | 0
d.txt | 0
3 fájl módosítva, 0 beillesztés (+), 0 törlés (-)
létrehozási mód 100644 b.txt
létrehozási mód 100644 c.txt
létrehozási mód 100644 d.txt

Most, ha megnézi az előzményeket, a következőképpen kell kinéznie:

$ git log -oneline
e071527 C4: Az ág „jellemzőinek” egyesítése
bb79c25 C3: d.txt hozzáadása
692bd8c C2: c.txt hozzáadása
a0df62a C1: b.txt hozzáadása
7575971 C0: a.txt hozzáadása

Láthatja, hogy annak ellenére, hogy pontosan ugyanazokat a módosításokat hajtja végre, az egyesítés ezen verziójában van egy extra C4 kötelezettségvállalás, amely azt jelenti, hogy a szolgáltatások elágazása mesterré válik.

Következtetés

A git merge no-ff zászló segít olvashatóbb előzmények létrehozásában. Lehetővé teszi olyan címkék elhelyezését, amelyek egyértelműen megmutatják, hol történt az egyesítés. Időt és erőfeszítést takaríthat meg a hibakeresés során.

A további vizsgálat:

Hivatkozások: