Hoe los ik een conflict op na git pull?

Ik moet een conflict oplossen na een git pull.

$ git pull
CONFLICT (rename/add): Renamed vignette_generator_mashed.h->vision_problem_8.h in 49423dd0d47abe6d839a783b5517bdfd200a202f. vision_problem_8.h added in HEAD
Added as vision_problem_8.h~HEAD_1 instead
Removed vignette_generator_cross_square.cc
Automatic merge failed; fix conflicts and then commit the result.

Dus ik googlede het een beetje, en vond mensen die zeiden dat ze git mergetoolgebruikten. Maar dit is wat ik heb:

$ git mergetool
merge tool candidates: meld kdiff3 tkdiff xxdiff meld gvimdiff emerge opendiff emerge vimdiff
No files need merging
$ git mergetool opendiff
merge tool candidates: meld kdiff3 tkdiff xxdiff meld gvimdiff emerge opendiff emerge vimdiff
opendiff: file not found

Betekent dit dat ik iets moet installeren?

Wat als ik gewoon wil dat de versie van git pullalles overschrijft?


Antwoord 1, autoriteit 100%

Hiervoor heb je geen mergetool nodig. Het kan vrij eenvoudig handmatig worden opgelost.

Uw conflict is dat uw lokale commits een bestand hebben toegevoegd, vision_problem_8.h, dat ook een externe commit heeft gemaakt, door een hernoeming van vignette_generator_mashed.h. Als je ls -l vision_problem_8.h*uitvoert, zul je waarschijnlijk meerdere versies van dit bestand zien die git voor je heeft bewaard. Een van hen zal van jou zijn, een andere zal de externe versie zijn. U kunt een editor of andere tools gebruiken om de tegenstrijdige inhoud op te lossen. Als je klaar bent, git addde betrokken bestanden en commit om het samenvoegen te voltooien.

Als je alleen de versie van de externe commit wilt gebruiken, dan kun je de kopie die je niet hebt geschreven op zijn plaats verplaatsen en git adddeze.


Betreffende de merge-tools, kijk eens naar git help mergetool. Kortom, het zal proberen elk van de meegeleverde mogelijkheden uit te voeren totdat het er een vindt, of er een gebruiken die je expliciet hebt geconfigureerd.


Antwoord 2, autoriteit 28%

Ik denk dat je de “-t”-schakelaar op je opdrachtregel bent vergeten. Volgens de git-helppagina staat het voor “-t , –tool=” dus het maakt wat je van plan was.

Probeer:

git mergetool -t gvimdiff

Natuurlijk mag je je favoriete samenvoegtool gebruiken in plaats van de mijne gvimdiff, samenvoegen is ook geweldig…


Antwoord 3, autoriteit 20%

Als je je samenvoeging uitvoert vanuit een submap van je project, zal git de samenvoeging uitvoeren voor je hele project. Echter, mergetool kan alleen bestanden zien (en samenvoegen) in of onder de werkmap. Dus als dit scenario zich voordoet, zorg er dan voor dat u uw conflictoplossing probeert uit te voeren vanuit de directory op het hoogste niveau in uw project.


Antwoord 4, autoriteit 12%

Wat als ik gewoon wil dat de versie van git pull alles overschrijft?
Als je precies dat wilt, gebruik dan:

git fetch
 git reset --hard origin/your-branch-name

Antwoord 5

Als je een goede vertakkingsstrategie hebt – oftewel features worden samengevoegd in development , net voor merge rebased etc. , meestal wanneer je een git pullwilt uitvoeren op een branch die je eigenlijk wilt hebben alle nieuwe dingen van de git-server, en pas later je eigen dingen toe, wat git lingua franca is, is zoiets als dit:

# put all my changes on the stash 
git stash 
# fully reset the current branch to the state it is on the server
git clean -d -x -f ; git reset HEAD --hard ; git pull --force
# apply your own changes 
git stash pop

U kunt in plaats van stash uw huidige status ook in een tmp-branch plaatsen … maar uiteindelijk, als er conflicten zijn, moet u deze handmatig oplossen …

Other episodes