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 mergetool
gebruikten. 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 pull
alles 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 add
de 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 add
deze.
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 pull
wilt 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 …