Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

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


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

Ответ 2

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

Пытаться:

git mergetool -t gvimdiff

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

Ответ 3

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

Ответ 4

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

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