Git Merge-opcija no-ff

Git Merge No Ff Option

Sposobnost gita za jednostavno spajanje jedna je od njegovih prednosti. Tijekom spajanja, git koristi brzo spajanje prema naprijed kada primijeti da je HEAD trenutne grane predak predaje koju pokušavate spojiti. U premotavanju brzog naprijed 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 spajanje izgleda sa i bez premotavanja unaprijed

Nakon premotavanja unaprijed, vaša će git povijest izgledati ovako:



C0 -> C1 -> C2—> C3



Za isti broj urezivanja, evo povijesti spajanja bez premotavanja unaprijed:



U prvom slučaju nema naznaka da je bilo grananja. U drugom slučaju, povijest prikazuje predaju C4 kako bi naznačila gdje je došlo do spajanja.

Hodanje kroz primjer

Napravit ćete git spremište, stvoriti granu i zatim pokušati spojiti sa i bez premotavanja naprijed.



Odjeljak 1: Postavljanje

Prvo, možete stvoriti git spremište sa sljedećim koracima:

$ mkdir moj_projekt
$ cd moj_projekt
$ git init
$ dodirnite a.txt
$ git add -A
$ git commit -m 'C0: Dodavanje a.txt'

Sada stvorimo granu pod nazivom značajke i izvršimo nekoliko promjena:

Značajke podružnice $ git
$ git značajke plaćanja
$ touch b.txt
$ git add -A
$ git commit -m 'C1: Dodavanje b.txt'
$ touch c.txt
$ git add -A
$ git commit -m 'C2: Dodavanje c.txt'
$ touch d.txt
$ git add -A
$ git commit -m 'C3: Dodavanje d.txt'

2. odjeljak: Spajanje s brzim prosljeđivanjem

Vratimo se na glavnu granu i spojimo granu značajki u nju:

$git checkoutovladati; majstorski
$git spajanjeobilježja

Izlaz:

Ažuriranje 08076fb..9ee88eb
Premotavanje unaprijed
b.txt | 0
c.txt | 0
d.txt | 0
3 datoteke promijenjene, 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 --oneline
9ee88eb C3: Dodavanje d.txt
c72b92c C2: Dodavanje c.txt
2e4039e C1: Dodavanje b.txt
08076fb C0: Dodavanje a.txt

Dakle, svi urezi iz grane značajki sada su u glavnoj grani. Ako nastavite s promjenama u ovladavanju, ne postoji način da znate kada je grana značajki spojena u nju.

Odjeljak 3: Bez brzog prosljeđivanja

Ponovite odjeljak 1 za novu mapu.

Zatim pokušajte spojiti bez brzog premotavanja naprijed:

$git checkoutovladati; majstorski
$git spajanje --no-ffznačajka

Otvorit će sljedeće u zadanom uređivaču teksta vašeg gita:

Spoji granu'značajke'
# Molimo unesite poruku urezivanja kako biste objasnili zašto je to spajanje potrebno,
# pogotovo ako spoji ažurirano uzvodno u granu teme.
#
# Reci koji počinju s '#' bit će zanemareni, a prazna poruka prekinuta
# počiniti.

Izmijenite komentare. U ovom slučaju možete samo dodati C4: prije spajanja 'značajki' grane. Izlaz bi trebao izgledati ovako:

Spajanje izvedeno po 'rekurzivnoj' strategiji.
b.txt | 0
c.txt | 0
d.txt | 0
3 datoteke promijenjene, 0 umetanja (+), 0 brisanja (-)
način stvaranja 100644 b.txt
način stvaranja 100644 c.txt
način stvaranja 100644 d.txt

Sada, ako provjerite povijest, to bi trebalo izgledati ovako:

$ git log --oneline
e071527 C4: Spoji 'značajke' grane
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 dodatno predavanje C4 što označava spajanje grane značajki u master.

Zaključak

Git merge no-ff zastava pomaže u stvaranju čitljivije povijesti. Omogućuje vam postavljanje oznaka koje jasno pokazuju gdje je došlo do spajanja. Može vam uštedjeti vrijeme i trud tijekom ispravljanja pogrešaka.

Daljni studiji:

Reference: