Git fusjon -ingen -ff -alternativet

Git fusjon -ingen -ff -alternativet

Forstå git smelte

Den enkle sammenslåingsevnen til Git er en av dens styrker. Under en sammenslåing bruker Git spol fremover sammenslåing når den merker at hodet til den nåværende grenen er en stamfar til forpliktelsen du prøver å slå sammen. I en spurt fremover sammenslåing er det ingen ny forpliktelse. Git flytter bare pekeren. Hvis denne oppførselen ikke er ønskelig, kan du bruke NO-FF-flagget for å skape en ny forpliktelse for sammenslåingen.

Hvordan sammenslåing ser ut med og uten spurt

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

C0 -> C1 -> C2-> C3

For samme antall forpliktelser, her er en sammenslåingshistorie 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 oppretter et Git-depot, oppretter en gren og deretter prøve sammenslåingene med og uten spurt fremover.

Avsnitt 1: Oppsett

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

$ mkdir my_project
$ CD my_project
$ git init
$ berøring 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 filialfunksjoner
$ git kassafunksjoner
$ berøring b.tekst
$ git add -a
$ git commit -m "c1: legge til b.tekst"
$ berøring c.tekst
$ git add -a
$ git commit -m "C2: Legge til C.tekst"
$ berøring d.tekst
$ git add -a
$ git commit -m "c3: legge til d.tekst"

Avsnitt2: Fett sammen med spurting

La oss gå tilbake til Master Branch og fusjonsfunksjonene til filial inn i den:

$ git Checkout Master
$ git fusjonsfunksjoner

Produksjon:

Oppdatering 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 historien, vil du se:

$ git log --oneline
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 forpliktelsene fra funksjoner er i mastergrenen nå. Hvis du fortsetter å gjøre endringer til Master, er det ingen måte å vite når funksjonsgrenen ble slått sammen i den.

Avsnitt 3: Uten spole fremover

Gjenta avsnitt 1 for en ny mappe.

Prøv deretter en sammenslåing uten å spole frem:

$ git Checkout Master
$ git fusjon-ingen-ff-funksjonen

Det vil åpne for følgende i Gits standardtekstredigerer:

Fusjonsgren 'Funksjoner'
# Vennligst 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 starter med '#' vil bli ignorert, og en tom melding aborterer
# forpliktelsen.

Endre kommentarene. I dette tilfellet kan du bare legge til “C4:” før “Merge Branch” -funksjoner ””. Utgangen skal se slik ut:

Fusjon 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 historien, skal det se ut som følgende:

$ git log --oneline
E071527 C4: Fusjonsgren '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 Merge den ekstra C4 -forpliktelsen som betegner sammenslåing av funksjonsgren til master.

Konklusjon

Git smelte. Det lar deg sette tagger som tydelig viser hvor sammenslåingen skjedde. Det kan spare deg for tid og krefter under feilsøking.

Videre studier:

  • https: // git-cm.com/docs/git-sammenslåing
Referanser:
  • Stack Overflow: Hva-er-den-forskjellen-mellom-git-sammenslåing-og-git-sammenslåing-no-ff
  • https: // www.Atlassian.com/git/tutorials/bruk-grener/git-sammenslåing