Git bruker grener for å isolere utviklingsstrømmer, for å forhindre at den stabile frigjøringsgrenen blir forurenset. Å bringe arbeid i en gren inn i hovedstrømmen betyr å slå sammen grener. Slik gjør du det.
Hva er en sammenslåing i git?
Forbereder seg på å slå sammen en gren i git
Utføre en sammenslåing
Utføre en spasert fremover sammenslåing i git
Hvordan du kan løse sammen konflikter i git
Alt fusjonerer etter hvert
Hva er en sammenslåing i git?
Git ble designet for å gjøre forgrening enkelt og raskt. I motsetning til andre versjonskontrollsystemer, er forgrening på Git en triviell sak. Spesielt på multi-utviklerprosjekter er forgrening et av Gits kjerneorganisasjonsverktøy.
Grener Sandbox Ny utviklingsinnsats slik at kode kan endres eller legges til uten å påvirke koden i andre grener, spesielt hoved- eller hovedgrenen. Dette inneholder vanligvis den stabile versjonen av kodebasen.
Å isolere disse endringene fra din stabile kodeversjon gir perfekt mening. Men før eller senere vil den nye koden bli testet, gjennomgått og gummistemplet for å rulles inn i mastergrenen. På det tidspunktet må du slå sammen grenen din til mastergrenen.
Faktisk kan filialer ha undergrener, slik at du kan slå sammen grenen din til en annen gren i stedet for mastergrenen. Bare husk at fusjoner alltid tar en gren og smelter den sammen til en mål gren, hva den grenen måtte være. Hvis du vil slå sammen mastergrenen din til en annen gren, kan du til og med gjøre det også.
Som de fleste handlinger i GIT, utfører du sammenslåing i ditt lokale depot og skyver dem til det eksterne depotet.
Forbereder seg på å slå sammen en gren i git
Vi har et lite utviklingsprosjekt med et lokalt Git -depot og et eksternt Git -depot. Vi opprettet en gren som heter “Bugfix14” fra “Master” -grenen og jobbet med en løsning på en feil.
Dette arbeidet er fullført, og vi har testet koden vår. Det hele fungerer som forventet. Vi ønsker å rulle disse endringene i mastergrenen slik at løsningen vår er en del av neste utgivelse av programvaren.
Det er litt forberedelser som skal gjøres før vi utfører sammenslåingen. Vi må sørge for at målgrenen - i dette tilfellet "master" -grenen - og grenen vi skal slå sammen i den er begge oppdatert.
- På grenen bugfix14 : Dette er vår nåværende gren.
- Filialen din er oppdatert med ‘Origin/Bugfix’ : Filialen i vårt lokale depot har samme forpliktelseshistorie som grenen i det avsidesliggende depotet. Det betyr at de er identiske.
- ingenting å begå Det er ingen endringer i iscenesettelsesområdet som ikke er begått.
- arbeider tre rent : Det er ingen ustagede endringer i arbeidskatalogen.
Alle disse indikerer at grenen er oppdatert, og vi er klare for å fortsette. Hvis noen av disse indikerte at endringer eksisterte, må vi arrangere dem, forplikte dem og skyve dem til fjernkontrollen. Hvis noen andre hadde jobbet med disse filene, kan det hende vi må trekke endringene fra det eksterne depotet.
Når vi sjekker ut grenen, skal vi slå sammen til å forenkle sammenslåingsprosessen. Det lar oss også bekrefte at den er oppdatert. La oss se på mastergrenen.
Vi får de samme bekreftelsene på at "master" -grenen er oppdatert.
I SLEKT: Hvordan velge Git Workflow & amp; Forgreningsmodell som passer for teamet ditt
Utføre en sammenslåing
“Bugfix14” -grenen ble forgrenet fra “Master” -grenen. Det har vært en forpliktelse til “Master” -grenen etter at “Bugfix14” -grenen ble opprettet. Det har vært et par forpliktelser til “Bugfix14” -grenen.
Vi har sørget for at våre to grener er oppdatert, og vi har sjekket ut "master" -grenen. Vi kan utstede kommandoen for å slå sammen “Bugfix14” -grenen til “Master” -grenen.
Sammenslåingen finner sted. Grenen “Bugfix14” eksisterer fremdeles, men nå er endringene som ble gjort i den grenen blitt slått sammen til "Master" -grenen.
I dette tilfellet utfører Merge -kommandoen en treveis sammenslåing . Det er bare to grener, men det er tre forpliktelser involvert. De er sjefen for en av grenene, og en tredje forpliktelse som representerer selve sammenslåingen.
For å oppdatere vårt eksterne depot, kan vi bruke git push kommando.
Noen mennesker foretrekker å slette sidegrener når de har slått dem sammen. Andre passer på å bevare dem som en oversikt over prosjektets sanne utviklingshistorie.
Hvis du vil slette grenen, kan du gjøre det ved å bruke
git gren
kommando med
-D
(slett) alternativet.
Til Slett grenen Bruk denne kommandoen i det eksterne depotet:
Du vil ha en lineær forpliktelseshistorie, men det vil ikke være den sanne historien.
I SLEKT: Hvordan slette git -grener på lokale og eksterne depoter
Utføre en spasert fremover sammenslåing i git
Hvis du ikke har gjort noen forpliktelser til "Master" -grenen, vil historien din se slik ut. Det vil også se dette ut hvis du har det ombasert Din utviklingsgren slik at den er knyttet til slutten av "master" -grenen.
Fordi det ikke er noen forpliktelser i "Master" -grenen, for å slå sammen "Bugfix15" -grenen, er alt GIT å gjøre å peke på "Master" -hodepekeren til den siste forpliktelsen til "Bugfix15" -grenen.
Git vil utføre en spetidig fusjon når det kan . Hvis det ikke er mulig å forplikte seg til "master" -grenen, er det mulig treveis sammenslåing .
Du kan ikke
makt
En raskt fremover sammenslåing-det kan ikke være mulig, tross alt-men du kan erklære at det kommer til å bli spole fremover sammenslåing eller ingenting. Det er et alternativ som instruerer Git om å bruke en spasert fremover sammenslåing hvis det kan, men ikke å gjøre en treveis sammenslåing hvis den ikke kan. Alternativet er
-bare
(Bare fremover fusjoner).
Dette fusjonerer “Bugfix15” -grenen til “Master” -grenen, men bare hvis en raskt fremover sammenslåing er mulig.
I dette tilfellet har det vært forpliktelser til "Master" -grenen, så en spasert fremover sammenslåing er ikke mulig.
Hvordan du kan løse sammen konflikter i git
Hvis de samme delene av den samme filen er endret i begge grenene, kan ikke grenene slås sammen. Menneskelig interaksjon er nødvendig for å løse de motstridende redigeringene.
Her har vi gjort endringer i en fil som heter "rot.c" i en gren kalt "bugfix17" som vi ønsker å slå sammen til "master" -grenen. Men "Rot.c" er også endret i "Master" -grenen.
Når vi prøver å slå sammen det, får vi en advarsel om at det er konflikter. Git viser de motstridende filene, og forteller oss at sammenslåingen mislyktes. Vi kunne gå ut helt ved å bruke
--avbryte
alternativ:
Men å løse sammenslåing er ikke så skummelt som det høres ut. Git har gjort litt arbeid for å hjelpe oss. Hvis vi redigerer en av de motstridende filene - i vårt tilfelle, har vi bare en - vi finner de motstridende kodeseksjonene som er fremhevet for oss.
Hver konflikt er avgrenset av syv mindre enn karakterer “
& lt; & lt; & lt; & lt; & lt; & lt; & lt;
”Og syv større enn karakterer”
& gt; & gt; & gt; & gt; & gt; & gt; & gt;
“, Med syv lik tegn”
=======
" mellom dem.
- Koden over likestegnene er fra grenen du slår sammen inn i .
- Koden under likesteget er koden fra grenen du prøver å slå sammen .
Du kan enkelt søke etter et av settene med syv tegn og gå fra konflikt til konflikt gjennom filen din. For hver konflikt, må du velge hvilket sett med redigeringer du skal beholde. Du må redigere koden du avviser, og de syv-karakterlinjene som Git har lagt til.
Vi kommer til å holde koden fra “Bugfix17” -grenen. Etter redigering ser filen vår slik ut.
Vi kan nå fortsette med sammenslåingen. Men merk at vi bruker
begå
kommando om å gjøre det, ikke
slå sammen
kommando.
Vi begår endringen ved å iscenesette filen og begå den som vanlig. Vi sjekker statusen før vi gjør den endelige forpliktelsen.
Sammenslåingen er fullført. Vi kan nå presse dette til vårt eksterne depot.
I SLEKT: Hvordan fikse, redigere eller angre Git Commits (Endre Git -historie)
Alt fusjonerer etter hvert
Alle grener må til slutt slås sammen, slik at endringene i dem ikke blir foreldreløse og glemmes.
Det er enkelt å slå sammen grener, men å håndtere konflikter kan bli komplisert i travle, større lag. Å løse konflikter kan kreve innspill fra hver utvikler bare for å forklare hva koden deres gjør og hvorfor de gjorde sine endringer. Du må forstå det før du kan ta en informert beslutning om hvilke redigeringer du skal beholde.
- › Hvordan gi nytt navn til en gren i git
- › Hvordan sjekke ut en ekstern Git -gren
- › Hvordan stash endringer i git
- › Hvordan bytte grener i github
- › Git rebase: alt du trenger å vite
- › OnePlus 11 er her, men med en grov start
- › Microsoft Edge får AI -chat og et nytt utseende på Windows
- › De beste øreproppene for iPhone -fans treffer nettopp den laveste prisen