Вопрос

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

Это было полезно?

Решение

Для этого вам не нужен 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/your-branch-name
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top