Git Merge-možnost brez ff

Git Merge No Ff Option



Sposobnost enostavnega združevanja gita je ena njegovih prednosti. Med združevanjem git uporablja hitro spajanje naprej, ko opazi, da je HEAD trenutne veje prednik zaveze, ki jo poskušate združiti. Pri hitrem združevanju ni nove zaveze. Git samo premakne kazalec. Če to vedenje ni zaželeno, lahko z zastavo no-ff ustvarite novo predajo za združitev.

Kako izgleda združitev z in brez hitrega napredovanja

Po hitrem pregledu naprej bo vaša zgodovina gita izgledala tako:







C0 -> C1 -> C2—> C3



Za enako število oddaj je tukaj zgodovina združevanja brez hitrega premikanja naprej:







V prvem primeru ni znakov, da bi prišlo do razvejanja. V drugem primeru zgodovina prikazuje zavezo C4, ki označuje, kje je prišlo do združitve.

Sprehod skozi primer

Ustvarili boste repozitorij git, ustvarili podružnico in nato poskusili združiti s hitrim naprej in brez.



1. oddelek: Nastavitev

Najprej lahko ustvarite skladišče git z naslednjimi koraki:

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

Zdaj pa ustvarimo vejo, imenovano features, in naredimo nekaj sprememb:

funkcije podružnice $ git
$ git checkout funkcije
$ touch b.txt
$ git add -A
$ git commit -m 'C1: Dodajanje b.txt'
$ touch c.txt
$ git add -A
$ git commit -m 'C2: Dodajanje c.txt'
$ touch d.txt
$ git add -A
$ git commit -m 'C3: Dodajanje d.txt'

2. razdelek: Združite s hitrim posredovanjem

Vrnimo se k glavni veji in vanj združimo vejo funkcij:

$git checkoutmojster
$git mergeLastnosti

Izhod:

Posodabljanje 08076fb..9ee88eb
Hitro naprej
b.txt | 0
c.txt | 0
d.txt | 0
3 datoteke spremenjene, 0 vstavkov (+), 0 izbrisov (-)
Ustvari način 100644 b.txt
Ustvari način 100644 c.txt
način ustvarjanja 100644 d.txt

Če preverite zgodovino, boste videli:

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

Torej so vse urejenosti iz veje funkcij zdaj v glavni veji. Če še naprej spreminjate master, ne morete vedeti, kdaj je bila veja funkcij združena z njo.

Oddelek 3: Brez hitrega posredovanja naprej

Ponovite oddelek 1 za novo mapo.

Nato poskusite združiti brez hitrega posredovanja naprej:

$git checkoutmojster
$git merge --no-fffunkcijo

V privzetem urejevalniku besedil vašega gita bo odprl naslednje:

Združi podružnico'Lastnosti'
# Prosimo, vnesite sporočilo o predaji, da pojasnite, zakaj je to združevanje potrebno,
# še posebej, če združi posodobljeno upstream v vejo teme.
#
# Vrstice, ki se začnejo z '#', bodo prezrte, prazno sporočilo pa se prekine
# zaveza.

Spremenite komentarje. V tem primeru lahko preprosto dodate C4: pred 'funkcijami' podružnice vezja. Izhod bi moral izgledati tako:

Združitev je izvedena s 'rekurzivno' strategijo.
b.txt | 0
c.txt | 0
d.txt | 0
3 datoteke spremenjene, 0 vstavkov (+), 0 izbrisov (-)
Ustvari način 100644 b.txt
Ustvari način 100644 c.txt
način ustvarjanja 100644 d.txt

Zdaj, če preverite zgodovino, bi morala izgledati takole:

$ git log --oneline
e071527 C4: Združite 'funkcije' podružnice
bb79c25 C3: Dodajanje d.txt
692bd8c C2: Dodajanje c.txt
a0df62a C1: Dodajanje b.txt
7575971 C0: Dodajanje a.txt

Vidite lahko, da ima ta različica združevanja, čeprav imate popolnoma enake spremembe, dodatno potrditev C4, kar pomeni združevanje veje funkcij v nadrejeno.

Zaključek

Zastava git merge no-ff pomaga ustvariti bolj berljivo zgodovino. Omogoča vam vstavljanje oznak, ki jasno prikazujejo, kje je prišlo do združitve. Pri odpravljanju napak vam lahko prihrani čas in trud.

Nadaljni študij:

Reference: