Hur man löser sammanfogningskonflikter i Git
Hur löser jag sammanfogningskonflikter i Git?
4577
3
Hur löser jag sammanfogningskonflikter i Git?
Försök:
git mergetool
Det öppnar ett grafiskt gränssnitt som visar dig hur du går igenom varje konflikt, och du kan välja hur du vill slå ihop den. Ibland krävs det lite handredigering efteråt, men oftast räcker det. Det är mycket bättre än att göra allt för hand säkert.
Enligt @JoshGlover kommentar:
Kommandot öppnar inte nödvändigtvis ett GUI om du inte installerar ett. Att köra
git mergetool
för mig resulterade i attvimdiff
användes. Du kan installera ett av följande verktyg för att använda det istället:meld
,opendiff
,kdiff3
,tkdiff
,xxdiff
,tortoisemerge
,gvimdiff
,diffuse
,ecmerge
,p4merge
,araxis
,vimdiff
,emerge
.Nedan följer en exempelprocedur för att använda
vimdiff
för att lösa sammanslagningskonflikter. Baserat på denna länkSteg 1: Kör följande kommandon i din terminal
Detta kommer att ställa in vimdiff som standardverktyg för sammanslagning.
Steg 2: Kör följande kommando i terminalen
Steg 3: Du kommer att se en vimdiff-display i följande format
Dessa 4 vyer är
Du kan navigera mellan dessa vyer med ctrl+w. Du kan nå MERGED-vyn direkt genom att använda ctrl+w följt av j.
Mer information om vimdiff navigation här och här.
Steg 4. Du kan redigera MERGED-vyn på följande sätt
Om du vill hämta ändringar från REMOTE
Om du vill få ändringar från BASE
Om du vill få ändringar från LOCAL
Steg 5. Spara, avsluta, bekräfta och städa upp
:wqa
spara och avsluta från vigit commit -m "message"
git clean
Ta bort extra filer (t.ex. *.orig) som skapats av diff-verktyget.Identifiera vilka filer som är i konflikt (Git borde berätta detta).
Öppna varje fil och granska diffs; Git avgränsar dem. Förhoppningsvis är det uppenbart vilken version av varje block som ska behållas. Du kan behöva diskutera det med andra utvecklare som har lagt in koden.
När du'har löst konflikten i en fil
git add the_file
.När du har löst alla konflikter gör du
git rebase --continue
eller vilket kommando som helst. Git sa att du skulle göra när du avslutade.Om du ofta gör små commits börjar du med att titta på kommentarerna till commits med
git log --merge
. Sedan visargit diff
dig konflikterna.För konflikter som omfattar mer än några få rader är det lättare att se vad som händer i ett externt GUI-verktyg. Jag gillar opendiff -- Git stöder också vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge out of the box och du kan installera andra:
git config merge.tool "your.tool"
kommer att ställa in ditt valda verktyg och sedan kommergit mergetool
efter en misslyckad sammanslagning att visa dig skillnaderna i sammanhanget.Varje gång du redigerar en fil för att lösa en konflikt kommer
git add filnamn
att uppdatera indexet och din diff kommer inte längre att visa den. När alla konflikter är hanterade och deras filer hargit add
-redigerats, kommergit commit
att slutföra din sammanslagning.