Sådan løser du sammenlægningskonflikter i Git
Hvordan løser jeg sammenlægningskonflikter i Git?
4577
3
Hvordan løser jeg sammenlægningskonflikter i Git?
Prøv:
git mergetool
Det åbner en GUI, der fører dig gennem hver enkelt konflikt, og du kan selv vælge, hvordan du vil sammenføje. Nogle gange kræver det en smule håndredigering bagefter, men som regel er det nok i sig selv. Det er i hvert fald meget bedre end at gøre det hele i hånden.
Som pr @JoshGlover kommentar:
Kommandoen doesn't nødvendigvis åbne en GUI, medmindre du installerer en. At køre
git mergetool
for mig resulterede i atvimdiff
blev brugt. Du kan installere et af følgende værktøjer for at bruge det i stedet:meld
,opendiff
,kdiff3
,tkdiff
,xxdiff
,tortoisemerge
,gvimdiff
,diffuse
,ecmerge
,p4merge
,araxis
,vimdiff
,emerge
.Nedenfor er et eksempel på en procedure til at bruge
vimdiff
til at løse sammenlægningskonflikter. Baseret på dette linkStræk 1: Kør følgende kommandoer i din terminal
Dette vil indstille vimdiff som standard sammenlægningsværktøj.
Strin 2: Kør følgende kommando i terminalen
Strg 3: Du vil se et vimdiff display i følgende format
Disse 4 visninger er
Du kan navigere mellem disse visninger ved hjælp af ctrl+w. Du kan komme direkte til MERGED-visning ved at bruge ctrl+w efterfulgt af j.
Mere info om vimdiff navigation her og her
Stræk 4. Du kan redigere MERGED-visningen på følgende måde
Hvis du ønsker at få ændringer fra REMOTE
Hvis du ønsker at hente ændringer fra BASE
Hvis du ønsker at hente ændringer fra LOCAL
Stræk 5. Gem, Afslut, Indberet og Ryd op
:wqa
gemme og afslutte fra vigit commit -m "message"
git clean
Fjern ekstra filer (f.eks. *.orig) skabt af diff-værktøjet.Identificer hvilke filer der er i konflikt (Git burde fortælle dig dette).
Åbn hver fil og undersøg diffs; Git afgrænser dem. Forhåbentlig vil det være indlysende, hvilken version af hver blok du skal beholde. Det kan være nødvendigt at diskutere det med andre udviklere, der har commitet koden.
Når du'har løst konflikten i en fil
git add the_file
.Når du har løst alle konflikter, skal du lave
git rebase --continue
eller en anden kommando Git sagde, du skulle gøre, da du afsluttede.Hvis du ofte laver små commits, kan du starte med at kigge på commit-kommentarerne med
git log --merge
. Derefter vilgit diff
vise dig konflikterne.For konflikter, der involverer mere end et par linjer, er det nemmere at se hvad der foregår i et eksternt GUI-værktøj. Jeg kan godt lide opendiff -- Git understøtter også vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge out of the box, og du kan installere andre:
git config merge.tool "your.tool"
vil indstille det valgte værktøj, og derefter vilgit mergetool
efter en mislykket sammenlægning vise dig diffs i kontekst.Hver gang du redigerer en fil for at løse en konflikt, vil
git add filnavn
opdatere indekset, og din diff vil ikke længere vise den. Når alle konflikterne er håndteret og deres filer er blevetgit add
-ed, vilgit commit
afslutte din sammenlægning.