Как мне разрешить конфликт после git pull? - PullRequest
51 голосов
/ 17 сентября 2009

Мне нужно разрешить конфликт после 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.

Так что я немного погуглил и нашел людей, говорящих, используя git mergetool. Но вот что я получил:

$ 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

Значит ли это, что я должен что-то установить?

Что, если я просто хочу, чтобы версия из git pull перезаписывала все?

Ответы [ 4 ]

24 голосов
/ 17 сентября 2009

Вам не нужен mergetool для этого. Это может быть решено довольно легко вручную.

Ваш конфликт состоит в том, что ваши локальные коммиты добавили файл vision_problem_8.h, который также был создан удаленным коммитом путем переименования из vignette_generator_mashed.h. Если вы запустите ls -l vision_problem_8.h*, вы, вероятно, увидите несколько версий этого файла, которые git сохранил для вас. Один из них будет вашим, другой будет удаленной версией. Вы можете использовать редактор или любые другие инструменты, которые вам нравятся, для разрешения противоречивого содержимого. Когда вы закончите, git add затронутые файлы и подтвердите завершение слияния.

Если вы просто хотите использовать версию удаленного коммита, вы можете просто переместить копию, которую вы не записали, и git add ее.


Что касается инструментов слияния, взгляните на git help mergetool. По сути, он попытается запустить каждую из включенных возможностей, пока не найдет одну из них, или использовать ту, которую вы явно настроили.

6 голосов
/ 08 октября 2012

Я думаю, вы просто забыли ключ "-t" в командной строке. На странице справки git это означает "-t, --tool =", поэтому делает то, что вы хотели.

Попробуйте:

git mergetool -t gvimdiff

Конечно, вы можете использовать предпочитаемый инструмент слияния вместо моего gvimdiff, meld тоже отлично ...

5 голосов
/ 16 февраля 2010

Если вы запустили слияние из подкаталога вашего проекта, git запустит слияние для всего вашего проекта. Однако mergetool может видеть (и объединять) файлы только в рабочем каталоге или под ним. Поэтому, если этот сценарий имеет место, убедитесь, что вы пытаетесь запустить разрешение конфликтов из каталога верхнего уровня в вашем проекте.

1 голос
/ 23 марта 2018

Что если я просто хочу, чтобы версия из git pull перезаписывала все? Если вы хотите именно это, вы должны использовать:

 git fetch
 git reset --hard origin/your-branch-name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...