Hoe samenvoeg conflicten op te lossen in Git
Hoe los ik samenvoeg conflicten op in Git?
4577
3
Hoe los ik samenvoeg conflicten op in Git?
Probeer:
git mergetool
Het opent een GUI die je door elk conflict leidt, en je kunt kiezen hoe je samenvoegt. Soms vereist het een beetje handwerk achteraf, maar meestal is het genoeg. Het is in ieder geval veel beter dan alles met de hand te doen.
Zoals @JoshGlover opmerkt:
Het commando opent niet noodzakelijkerwijs een GUI tenzij je er een installeert. Het uitvoeren van
git mergetool
resulteerde bij mij in het gebruik vanvimdiff
. Je kunt een van de volgende tools installeren om het in plaats daarvan te gebruiken:meld
,opendiff
,kdiff3
,tkdiff
,xxdiff
,tortoisemerge
,gvimdiff
,diffuse
,ecmerge
,p4merge
,araxis
,vimdiff
,emerge
.Hieronder staat een voorbeeld procedure om
vimdiff
te gebruiken om samenvoeg conflicten op te lossen. Gebaseerd op deze linkStap 1: Voer de volgende commando's uit in uw terminal
Dit zal vimdiff instellen als het standaard samenvoeggereedschap.
Stap 2: Voer het volgende commando uit in terminal
Stap 3: U zult een vimdiff scherm zien in de volgende opmaak
Deze 4 weergaven zijn
Je kunt tussen deze views navigeren met ctrl+w. Je kan rechtstreeks naar MERGED view gaan met ctrl+w gevolgd door j.
Meer info over vimdiff navigatie hier en hier
Stap 4. Je zou de MERGED view op de volgende manier kunnen bewerken
Als je wijzigingen wilt krijgen van REMOTE
Als u wijzigingen wilt ontvangen van BASE
Als u wijzigingen van LOCAL wilt opvragen
Stap 5. Opslaan, afsluiten, vastleggen en opruimen
:wqa
opslaan en afsluiten van vigit commit -m "message"
git clean
Verwijder extra bestanden (b.v. *.orig) gemaakt door diff tool.Identificeer welke bestanden in conflict zijn (Git zou je dit moeten vertellen).
Open elk bestand en bekijk de diffs; Git bakent ze af. Hopelijk is het duidelijk welke versie van elk blok je moet houden. Misschien moet je het bespreken met mede ontwikkelaars die de code gecommit hebben.
Zodra je'het conflict in een bestand hebt opgelost
git add the_file
.Als je alle conflicten hebt opgelost, doe dan
git rebase --continue
of welk commando Git zei te doen toen je klaar was.Als je regelmatig kleine commits maakt, begin dan met het bekijken van de commit commentaren met
git log --merge
. Dan zalgit diff
je de conflicten laten zien.Voor conflicten die meer dan een paar regels omvatten, is het makkelijker om te zien wat er aan de hand is in een extern GUI gereedschap. Ik hou van opendiff -- Git ondersteunt ook vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge out of the box en je kunt anderen installeren:
git config merge.tool "your.tool"
zal je gekozen tool instellen en dan zalgit mergetool
na een mislukte samenvoeging je de diffs in context laten zien.Elke keer dat je een bestand bewerkt om een conflict op te lossen, zal
git add filename
de index bijwerken en je diff zal het niet langer laten zien. Als alle conflicten zijn afgehandeld en hun bestanden zijngit add
-ed, zalgit commit
de samenvoeging voltooien.