Razumijevanje opcije Git Merge no-ff
Jednostavnost spajanja gita jedna je od njegovih prednosti. Tijekom spajanja, git koristi premotavanje unaprijed kada primijeti da je HEAD trenutne grane predak urezivanja koje pokušavate spojiti. U brzom spajanju nema novog urezivanja. Git samo pomiče pokazivač. Ako ovo ponašanje nije poželjno, možete upotrijebiti zastavicu no-ff za stvaranje novog urezivanja za spajanje.
Kako Merge izgleda brzo i naprijed
Nakon premotavanja prema naprijed, vaša će git povijest izgledati ovako:
C0 -> C1 -> C2-> C3
Za isti broj predavanja, evo povijesti spajanja bez premotavanja unaprijed:
U prvom slučaju nema naznaka da je bilo razgrananja. U drugom slučaju, povijest prikazuje predavanje C4 kako bi se naznačilo gdje je došlo do spajanja.
Šetnja kroz primjer
Stvorit ćete git spremište, stvoriti granu, a zatim isprobati spajanje sa i bez premotavanja unaprijed.
Odjeljak 1: Postavljanje
Prvo, možete stvoriti git spremište pomoću sljedećih koraka:
$ mkdir moj_projekt$ cd moj_projekt
$ git init
$ dodirni a.txt
$ git dodaj -A
$ git commit -m "C0: Dodavanje a.txt "
Sada kreirajmo granu koja se naziva značajke i izvršimo nekoliko promjena:
Značajke grane $ git$ git značajke naplate
$ dodir b.txt
$ git dodaj -A
$ git commit -m "C1: Dodavanje b.txt "
$ dodir c.txt
$ git dodaj -A
$ git commit -m "C2: Dodavanje c.txt "
$ dodir d.txt
$ git dodaj -A
$ git commit -m "C3: Dodavanje d.txt "
Odjeljak 2: Spajanje s brzim prosljeđivanjem
Vratimo se glavnoj grani i u nju spojimo grane:
$ git checkout masterZnačajke spajanja $ git
Izlaz:
Ažuriranje 08076fb… 9ee88ebPremotavanje unaprijed
b.txt | 0
c.txt | 0
d.txt | 0
Promijenjene su 3 datoteke, 0 umetanja (+), 0 brisanja (-)
način stvaranja 100644 b.txt
način stvaranja 100644 c.txt
način stvaranja 100644 d.txt
Ako provjerite povijest, vidjet ćete:
$ git log --oneline9ee88eb C3: Dodavanje d.txt
c72b92c C2: Dodavanje c.txt
2e4039e C1: Dodavanje b.txt
08076fb C0: Dodavanje a.txt
Dakle, svi predaji iz grane značajki sada su u glavnoj grani. Ako nastavite s izmjenama u masteru, ne možete znati kada je grana značajki spojena u njega.
Odjeljak 3: Bez brzog prosljeđivanja
Ponovite odjeljak 1 za novu mapu.
Zatim pokušajte spojiti bez brzog premotavanja unaprijed:
$ git checkout master$ git merge - značajka -no-ff
Otvorit će sljedeće u zadanom uređivaču teksta vašeg Gita:
Spoji grane 'značajke'# Unesite poruku urezivanja kako biste objasnili zašto je ovo spajanje potrebno,
# pogotovo ako spaja ažurirani uzvodno u granu teme.
#
# Linije koje počinju s '#' bit će zanemarene, a prazna poruka će se prekinuti
# počiniti.
Izmijenite komentare. U tom slučaju možete dodati "C4:" prije "Spajanje grana 'značajke'". Izlaz bi trebao izgledati ovako:
Spajanje izvedeno 'rekurzivnom' strategijom.b.txt | 0
c.txt | 0
d.txt | 0
Promijenjene su 3 datoteke, 0 umetanja (+), 0 brisanja (-)
način stvaranja 100644 b.txt
način stvaranja 100644 c.txt
način stvaranja 100644 d.txt
Ako provjerite povijest, ona bi trebala izgledati ovako:
$ git log --onelinee071527 C4: Spajanje grane 'značajke'
bb79c25 C3: Dodavanje d.txt
692bd8c C2: Dodavanje c.txt
a0df62a C1: Dodavanje b.txt
7575971 C0: Dodavanje a.txt
Možete vidjeti da, iako imate potpuno iste promjene, ova verzija spajanja ima dodatni C4 predaj koji označava spajanje značajki grane u master.
Zaključak
Oznaka git merge no-ff pomaže stvoriti čitljiviju povijest. Omogućuje vam stavljanje oznaka koje jasno pokazuju gdje je došlo do spajanja. To vam može uštedjeti vrijeme i trud tijekom otklanjanja pogrešaka.
Daljni studiji:
- https: // git-scm.com / docs / git-merge
Reference:
- Stack Overflow: kakva je razlika između git-merge-i-git-merge-no-ff
- https: // www.atlasa.com / git / tutoriali / using-branch / git-merge