Lösa en merge-konflikt
Git klarar de flesta mergar automatiskt. Men när samma rad ändrats på två ställen kan den inte gissa vilket som är rätt — det är upp till dig.
Det ser skrämmande ut första gången. Det är inte farligt.
Vad som händer
Du kör git merge eller git pull och får:
Auto-merging Kassan.csCONFLICT (content): Merge conflict in Kassan.csAutomatic merge failed; fix conflicts and then commit the result.Git har pausat. Inget är förstört — Git väntar bara på ett beslut.
Hitta alla konflikter
git statusUnmerged paths: both modified: Kassan.csÖppna filen. Konflikten ser ut såhär:
<<<<<<< HEAD var total = produkter.Sum(p => p.Pris * 0.9m); // 10% kampanjrabatt======= var total = produkter.Sum(p => p.Pris); if (rabattkod != null) total -= rabattkod.BeraknaRabatt(total);>>>>>>> feature/rabattkod<<<<<<< HEADtill=======— din version (branchen du är på)=======till>>>>>>>— den inkommande versionen (branchen du mergade in)
Lös konflikten
Bestäm vad den slutliga koden ska vara. Ta bort konfliktmarkeringarna (<<<<<<<, =======, >>>>>>>) och skriv rätt kod. Ofta är svaret att kombinera båda:
var total = produkter.Sum(p => p.Pris); if (rabattkod != null) total -= rabattkod.BeraknaRabatt(total); // kampanjrabatter hanteras via rabattkod-systemet nuAvsluta
git add Kassan.cs # markera konflikten som löstgit commit # Git föreslår ett merge-commit-meddelandeÄr det flera filer med konflikter: lös dem en i taget, git add var och en, sedan ett enda git commit på slutet.
Avbryta om du ångrar dig
Vill du backa och börja om?
git merge --abortÅtergår till exakt läget innan du startade mergen.
I VS Code
VS Code har inbyggt stöd för merge-konflikter. Det visar Accept Current Change, Accept Incoming Change, Accept Both Changes direkt i editorn bredvid konfliktmarkeringarna. Enklare än att redigera markeringarna manuellt.
Tips: minska konflikter i framtiden
Konflikter uppstår när branches lever länge och divergerar. Mergea (eller rebasea) main till din feature-branch regelbundet — hellre många små konflikter längs vägen än en stor i slutet.