Git Merge –no-ff Alternativ

Git Merge No Ff Option



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

Hvordan flette ser ut med og uten hurtig fremover

Etter en spoling fremover vil git-historien din se slik ut:







C0 -> C1 -> C2—> C3



For det samme antallet forpliktelser, her er en flettehistorie uten spoling fremover:







I det første tilfellet er det ingen indikasjon 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 opprette et git-depot, opprette en gren og deretter prøve sammenslåingen med og uten spoling fremover.



Del 1: Oppsett

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

$ mkdir mitt_prosjekt
$ cd my_project
$ git init
$ touch a.txt
$ git add -A
$ git commit -m 'C0: Legger til a.txt'

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

$ git filialfunksjoner
$ git betalingsfunksjoner
$ touch b.txt
$ git add -A
$ git commit -m 'C1: Legger til b.txt'
$ touch c.txt
$ git add -A
$ git commit -m 'C2: Legger til c.txt'
$ touch d.txt
$ git add -A
$ git commit -m 'C3: Legger til d.txt'

Seksjon 2: Slå sammen med hurtig videresending

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

$git checkoutherre
$git fusjonfunksjoner

Produksjon:

Oppdaterer 08076fb..9ee88eb
Spol fremover
b.txt | 0
c.txt | 0
d.txt | 0
3 filer endret, 0 innsetting (+), 0 sletting (-)
opprettingsmodus 100644 b.txt
opprettingsmodus 100644 c.txt
opprettingsmodus 100644 d.txt

Hvis du sjekker historikken, ser du:

$ git logg -online
9ee88eb C3: Legger til d.txt
c72b92c C2: Legger til c.txt
2e4039e C1: Legger til b.txt
08076fb C0: Legger til a.txt

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

Del 3: Uten hurtigspoling

Gjenta seksjon 1 for en ny mappe.

Prøv deretter en flette uten å videresende raskt:

$git checkoutherre
$git fusjon --no-fftrekk

Det åpner følgende i gitens standard tekstredigerer:

Slå sammen gren'funksjoner'
# Skriv inn en forpliktelsesmelding for å forklare hvorfor denne sammenslåingen er nødvendig,
# spesielt hvis den fusjonerer en oppdatert oppstrøms til en emnegren.
#
# Linjer som begynner med '#' blir ignorert, og en tom melding avbrytes
# forpliktelsen.

Endre kommentarene. I dette tilfellet kan du bare legge til C4: before Merge -grenen 'funksjoner'. Utgangen skal se slik ut:

Sammenslåing gjort av den 'rekursive' strategien.
b.txt | 0
c.txt | 0
d.txt | 0
3 filer endret, 0 innsetting (+), 0 sletting (-)
opprettingsmodus 100644 b.txt
opprettingsmodus 100644 c.txt
opprettingsmodus 100644 d.txt

Hvis du sjekker historikken, bør den se slik ut:

$ git logg -online
e071527 C4: Slå sammen filialfunksjoner
bb79c25 C3: Legger til d.txt
692bd8c C2: Legger til c.txt
a0df62a C1: Legger til b.txt
7575971 C0: Legger til en .txt

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

Konklusjon

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

Videre studier:

Referanser: