Slik løser du flettekonflikter i Git
Hvordan løser jeg flettekonflikter i Git?
4577
3
Hvordan løser jeg flettekonflikter i Git?
Prøv:
git mergetool
Det åpner en GUI som tar deg gjennom hver konflikt, og du får velge hvordan du vil slå sammen. Noen ganger krever det litt håndredigering etterpå, men vanligvis er det nok av seg selv. Det er mye bedre enn å gjøre det hele for hånd absolutt.
Som per @JoshGlover kommentar:
Kommandoen åpner ikke nødvendigvis en GUI med mindre du installerer en. Å kjøre
git mergetool
for meg resulterte i atvimdiff
ble brukt. Du kan installere et av følgende verktøy for å bruke det i stedet:meld
,opendiff
,kdiff3
,tkdiff
,xxdiff
,tortoisemerge
,gvimdiff
,diffuse
,ecmerge
,p4merge
,araxis
,vimdiff
,emerge
.Nedenfor er eksempelprosedyren for å bruke
vimdiff
for å løse sammenslåingskonflikter. Basert på denne lenkenTrinn 1: Kjør følgende kommandoer i terminalen din
Dette vil sette vimdiff som standard fletteverktøy.
Trinn 2: Kjør følgende kommando i terminalen
Trinn 3: Du vil se en vimdiff-skjerm i følgende format
Disse 4 visningene er
Du kan navigere mellom disse visningene ved å bruke ctrl+w. Du kan gå direkte til MERGED-visningen ved å bruke ctrl+w etterfulgt av j.
Mer informasjon om vimdiff-navigasjon her og her.
Trinn 4. Du kan redigere MERGED-visningen på følgende måte
Hvis du ønsker å få endringer fra REMOTE
Hvis du ønsker å få endringer fra BASE
Hvis du ønsker å få endringer fra LOCAL
Trinn 5. Lagre, avslutte, bekrefte og rydde opp
:wqa
lagre og avslutte fra vigit commit -m "melding"
git clean
Fjern ekstra filer (f.eks. *.orig) opprettet av diff-verktøyet.Identifiser hvilke filer som er i konflikt (Git skal fortelle deg dette).
Åpne hver fil og undersøk forskjellene; Git avgrenser dem. Forhåpentligvis vil det være åpenbart hvilken versjon av hver blokk som skal beholdes. Du må kanskje diskutere det med andre utviklere som har lagt inn koden.
Når du har løst konflikten i en fil
git add the_file
.Når du har løst alle konflikter, gjør
git rebase --continue
eller hvilken som helst kommando Git sa du skulle gjøre når du var ferdig.Hvis du gjør hyppige små commits, så start med å se på commit-kommentarene med
git log --merge
. Da vilgit diff
vise deg konfliktene.For konflikter som involverer mer enn noen få linjer, er det lettere å se hva som skjer i et eksternt GUI-verktøy. Jeg liker opendiff - Git støtter også vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, dukker opp ut av esken, og du kan installere andre:
git config merge.tool "your.tool"
vil sette ditt valgte verktøy og derettergit mergetool
etter en mislykket sammenslåing vil vise deg diffene i sammenheng.Hver gang du redigerer en fil for å løse en konflikt, vil
git add filename
oppdatere indeksen, og diffen vil ikke lenger vise den. Når alle konfliktene er håndtert og filene har blittgit add
-ed, vilgit commit
fullføre sammenslåingen.