Как разрешить конфликт после git pull?

мне надо решить какой-то конфликт после 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 ответов


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

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

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


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


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

попробуй:

git mergetool -t gvimdiff

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


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


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

 git fetch
 git reset --hard origin/yourBranchName