A Git Merge no-ff Option megértése
A git könnyen egyesíthető képessége az egyik erőssége. Összevonás során a git gyors előre egyesítést használ, amikor észreveszi, hogy az aktuális ág FEJE az egyesíteni kívánt elkötelezettség őse. Gyors előretekerés esetén nincs új elkötelezettség. Git csak mozgatja a mutatót. Ha ez a viselkedés nem kívánatos, akkor a no-ff jelzővel létrehozhat egy új kötést az egyesítéshez.
Hogyan néz ki az egyesítés a gyors előre és anélkül
Gyors előretekerést követően a git előzményei a következőképpen fognak kinézni:
C0 -> C1 -> C2-> C3
Ugyanazon számú kötelezettségvállalás esetén itt van egy egyesítési előzmény gyors előretekerés nélkül:
Az első esetben nincs arra utaló jel, hogy bármilyen elágazás történt volna. A második esetben az előzmények egy C4 elkötelezettséget mutatnak, amely jelzi az egyesülés helyét.
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éseket gyors előre é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
$ érintse meg a.txt
$ git add -A
$ git kötelezettség -m "C0: a hozzáadása.txt "
Most hozzunk létre egy ágat, amelyet úgy hívunk: features, és hajtsunk végre néhány módosítást:
$ git ág jellemzői$ git pénztár funkciók
$ érintés b.txt
$ git add -A
$ git elkövetés -m "C1: b hozzáadása.txt "
$ touch c.txt
$ git add -A
$ git kötelezettség -m "C2: c hozzáadása.txt "
$ touch d.txt
$ git add -A
$ git kötelezettség -m "C3: d hozzáadása.txt "
2. szakasz: Egyesítés gyors továbbítással
Térjünk vissza a master ághoz, és egyesítsük az ágakat:
$ git checkout master$ git egyesítési funkciók
Kimenet:
08076fb frissítése… 9ee88ebElőrepörgetés
b.txt | 0
c.txt | 0
d.txt | 0
3 fájl megváltozott, 0 beszúrá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, a következőket fogja látni:
$ git log - online9ee88eb C3: d hozzáadása.txt
c72b92c C2: c hozzáadása.txt
2e4039e C1: b hozzáadása.txt
08076fb C0: a.txt
Tehát, az összes funkció a fiók ágból a fő ágban van. Ha folytatja a master módosítását, akkor nincs mód arra, hogy megtudja, mikor egyesítették a Features ágat.
3. szakasz: Gyors tová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 továbbítás nélkül:
$ git checkout master$ git merge --no-ff funkció
A következőket nyitja meg a git alapértelmezett szövegszerkesztőjében:
Fiók egyesítése# Írjon be egy elkötelező üzenetet, hogy elmagyarázza, miért szükséges ez az egyesítés,
# főleg, ha egy frissített upstream-et egyesít egy témakörbe.
#
# A „#” betűvel kezdődő sorokat a rendszer figyelmen kívül hagyja, és egy üres üzenet megszakad
# az elkövetés.
Módosítsa a megjegyzéseket. Ebben az esetben egyszerűen hozzáadhatja a „C4:” szót az „Ágazati funkciók egyesítése” előtt. A kimenetnek így kell kinéznie:
Egyesítés a „rekurzív” stratégiával.b.txt | 0
c.txt | 0
d.txt | 0
3 fájl megváltozott, 0 beszúrá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, annak a következőképpen kell kinéznie:
$ git log - onlinee071527 C4: Fiók egyesítése „jellemzők”
bb79c25 C3: d hozzáadása.txt
692bd8c C2: c hozzáadása.txt
a0df62a C1: b hozzáadása.txt
7575971 C0: a.txt
Láthatja, hogy annak ellenére, hogy pontosan ugyanazokat a változtatásokat hajtja végre, az egyesítésnek ez a verziója rendelkezik egy extra C4 elkötelezettséggel, ami azt jelenti, hogy a funkciók elágazása a master.
Következtetés
A git merge no-ff jelző segít az olvashatóbb előzmények létrehozásában. Lehetővé teszi olyan címkék elhelyezését, amelyek világosan mutatják az egyesülések helyét. Időt és energiát takaríthat meg a hibakeresés során.
A további vizsgálat:
- https: // git-scm.com / docs / git-merge
Referenciák:
- Verem túlcsordulás: mi a különbség a git-merge-és-git-merge-no-ff között
- https: // www.atlassian.com / git / tutorials / using-branch / git-merge