Git

Git Merge -no-ff Option

Git Merge -no-ff Option

Forstå Git Merge no-ff Option

Den enkle sammenslåingsevnen til git er en av styrkene. Under en sammenslåing bruker git spole fremover når den merker at HODET til den nåværende grenen er en forfader til forpliktelsen du prøver å slå sammen. I en fremover sammenslåing er det ingen nye forpliktelser. Git bare flytter pekeren. Hvis denne oppførselen ikke er ønskelig, kan du bruke no-ff-flagget til å opprette en ny forpliktelse for sammenslåingen.

Hvordan Merge ser ut med og uten å spole fremover

Etter en rask fremover vil git-historikken din se slik ut:

C0 -> C1 -> C2-> C3

For det samme antall forpliktelser, her er en flettehistorikk uten å spole fremover:

I det første tilfellet er det ingen indikasjoner på at det var noen forgrening. I det andre tilfellet viser historien en C4-forpliktelse for å indikere hvor sammenslåingen skjedde.

Gå gjennom et eksempel

Du vil lage et git-arkiv, opprette en gren og deretter prøve sammenslåingene med og uten å spole fremover.

Seksjon 1: Oppsett

Først kan du opprette git-depotet med følgende trinn:

$ mkdir my_project
$ cd my_project
$ git init
$ berør a.tekst
$ git add -A
$ git commit -m "C0: Legge til en.tekst"

La oss nå lage en gren som heter funksjoner og begå noen få endringer:

$ git grenfunksjoner
$ git utsjekkingsfunksjoner
$ touch b.tekst
$ git add -A
$ git commit -m "C1: Legger til b.tekst"
$ touch c.tekst
$ git add -A
$ git commit -m "C2: Legger til c.tekst"
$ touch d.tekst
$ git add -A
$ git commit -m "C3: Legger til d.tekst"

Seksjon 2: Slå sammen med hurtigspoling

La oss gå tilbake til hovedgrenen og slå sammen funksjoner i den:

$ git checkout master
$ git merge funksjoner

Produksjon:

Oppdaterer 08076fb ... 9ee88eb
Spol fremover
b.txt | 0
c.txt | 0
d.txt | 0
3 filer endret, 0 innsettinger (+), 0 slettinger (-)
opprett modus 100644 b.tekst
opprett modus 100644 c.tekst
opprett modus 100644 d.tekst

Hvis du sjekker historikken, ser du:

$ git log --online
9ee88eb C3: Legge til d.tekst
c72b92c C2: Legge til c.tekst
2e4039e C1: Legge til b.tekst
08076fb C0: Legge til en.tekst

Så alle forpliktelser fra funksjoner er i hovedgrenen nå. Hvis du fortsetter å gjøre endringer i masteren, er det ingen måte å vite når funksjonsgrenen ble slått sammen.

Seksjon 3: Uten spedisjon

Gjenta del 1 for en ny mappe.

Prøv deretter å slå sammen uten å spole videre:

$ git checkout master
$ git merge --no-ff-funksjon

Det vil åpne for følgende i gits standard teksteditor:

Slå sammen filialens funksjoner
# Skriv inn en meldingsmelding for å forklare hvorfor denne sammenslåingen er nødvendig,
# spesielt hvis det slår sammen en oppdatert oppstrøms i en emnegren.
#
# Linjer som begynner med '#' vil bli ignorert, og en tom melding avbrytes
# forpliktelsen.

Endre kommentarene. I dette tilfellet kan du bare legge til "C4:" før "Slå sammen filialfunksjoner" ". Utgangen skal se slik ut:

Sammenslåing laget av den 'rekursive' strategien.
b.txt | 0
c.txt | 0
d.txt | 0
3 filer endret, 0 innsettinger (+), 0 slettinger (-)
opprett modus 100644 b.tekst
opprett modus 100644 c.tekst
opprett modus 100644 d.tekst

Nå hvis du sjekker historikken, bør den se ut som følger:

$ git log --online
e071527 C4: Slå sammen filialens funksjoner
bb79c25 C3: Legge til d.tekst
692bd8c C2: Legge til c.tekst
a0df62a C1: Legge til b.tekst
7575971 C0: Legge til en.tekst

Du kan se at selv om du har nøyaktig de samme endringene, har denne versjonen av fusjon den ekstra C4-forpliktelsen som betyr sammenslåing av funksjonsgren til master.

Konklusjon

Git merge no-ff-flagget hjelper til med å skape en mer lesbar historie. Den lar deg sette koder som tydelig viser hvor sammenslåingen skjedde. Det kan spare deg for tid og krefter under feilsøking.

Videre studier:

Referanser:
Topp 10 spill å spille på Ubuntu
Windows-plattformen har vært en av de dominerende plattformene for spill på grunn av den enorme andelen spill som utvikles i dag for å støtte Windows ...
5 beste arkadespill for Linux
I dag er datamaskiner seriøse maskiner som brukes til spill. Hvis du ikke kan få den nye høye poengsummen, vil du vite hva jeg mener. I dette innlegge...
Kamp for Wesnoth 1.1. 3.6 Utvikling utgitt
Kamp for Wesnoth 1.1. 3.6 utgitt i forrige måned, er den sjette utgivelsen i 1.1. 3.x-serien, og den leverer en rekke forbedringer, spesielt til bruke...