Razumevanje možnosti Git Merge no-ff
Enostavnost spajanja gita je ena od njegovih prednosti. Med spajanjem git uporablja hitro spajanje naprej, ko opazi, da je HEAD trenutne veje prednik preda, ki jo želite združiti. Pri hitrem združevanju ni novega prevzema. Git samo premakne kazalec. Če to vedenje ni zaželeno, lahko z zastavico no-ff ustvarite novo objavo za spajanje.
Kako je videti združitev s hitrim napredkom in brez njega
Po preusmeritvi naprej bo vaša zgodovina git videti tako:
C0 -> C1 -> C2-> C3
Za enako število prevzemov je tukaj zgodovina združevanja brez pospeševanja naprej:
V prvem primeru nič ne kaže, da je 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 vejo in nato poskusili združitve s hitro previjanjem naprej in brez njega.
Oddelek 1: Namestitev
Najprej lahko git repozitorij ustvarite z naslednjimi koraki:
$ mkdir moj_projekt$ cd moj_projekt
$ git init
$ dotik a.txt
$ git add -A
$ git commit -m "C0: Dodajanje a.txt "
Zdaj pa ustvarimo vejo, imenovano funkcije, in naredimo nekaj sprememb:
Značilnosti podružnice $ git$ git checkout funkcije
$ dotik b.txt
$ git add -A
$ git commit -m "C1: Dodajanje b.txt "
$ dotik 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 "
Poglavje 2: Združitev s hitrim posredovanjem
Vrnimo se na glavno vejo in v to združimo značilnosti:
$ git checkout master$ git merge funkcije
Izhod:
Posodabljanje 08076fb… 9ee88ebHitro naprej
b.txt | 0
c.txt | 0
d.txt | 0
3 datoteke spremenjene, 0 vstavkov (+), 0 izbrisov (-)
ustvari način 100644 b.txt
ustvariti način 100644 c.txt
ustvariti način 100644 d.txt
Če preverite zgodovino, boste videli:
$ git log --oneline9ee88eb C3: Dodajanje d.txt
c72b92c C2: Dodajanje c.txt
2e4039e C1: Dodajanje b.txt
08076fb C0: Dodajanje a.txt
Torej, vsi predaji iz veje lastnosti so zdaj v glavni veji. Če še naprej spreminjate master, ni mogoče vedeti, kdaj je bila veja funkcij združena vanj.
Oddelek 3: Brez hitrega posredovanja naprej
Ponovite 1. odsek za novo mapo.
Nato poskusite združiti brez posredovanja naprej:
$ git checkout master$ git merge --no-ff funkcija
V privzetem urejevalniku besedil vašega gita se bo odprlo naslednje:
Spoji veje 'lastnosti'# Prosimo, vnesite sporočilo za objavo, da razložite, zakaj je ta združitev potrebna,
# še posebej, če združi posodobljeno upstream v vejo teme.
#
# Vrstice, ki se začnejo z '#', bodo prezrte in prazno sporočilo se bo prekinilo
# zaveza.
Spremenite komentarje. V tem primeru lahko preprosto dodate “C4:” pred “Spajanje vej 'lastnosti” ”. Izhod bi moral izgledati tako:
Združitev, narejena 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
ustvariti način 100644 c.txt
ustvariti način 100644 d.txt
Zdaj, če preverite zgodovino, mora biti videti tako:
$ git log --onelinee071527 C4: Spajanje vej 'lastnosti'
bb79c25 C3: Dodajanje d.txt
692bd8c C2: Dodajanje c.txt
a0df62a C1: Dodajanje b.txt
7575971 C0: Dodajanje a.txt
Vidite lahko, da ima kljub popolnoma enakim spremembam ta različica združevanja dodaten C4 zavezujoči znak, ki pomeni združevanje vej funkcij v glavni.
Zaključek
Oznaka git merge no-ff pomaga ustvariti bolj berljivo zgodovino. Omogoča vam, da postavite oznake, ki jasno kažejo, kje je prišlo do združitve. Prihranite lahko čas in trud med odpravljanjem napak.
Nadaljni študij:
- https: // git-scm.com / docs / git-merge
Reference:
- Stack Overflow: kakšna-je-razlika-med-git-merge-in-git-merge-no-ff
- https: // www.atlassian.com / git / tutorials / using-branch / git-merge