Como faço para resolver um conflito depois de git pull?
Pergunta
Eu tenho que resolver algum conflito após uma 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.
Então, eu pesquisei um pouco, e encontrei pessoas dizendo usando git mergetool
. Mas aqui é o que eu tenho:
$ 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
Então, isso significa que eu tenho que instalar alguma coisa?
E se eu simplesmente querem a versão de git pull
a tudo substituir?
Solução
Você não precisa mergetool para isso. Ele pode ser resolvido muito facilmente manualmente.
O seu conflito é que seus commits locais adicionou um arquivo, vision_problem_8.h
, que um controle remoto cometer também criou, por uma renomeação de vignette_generator_mashed.h
. Se você executar ls -l vision_problem_8.h*
provavelmente você vai ver várias versões deste arquivo que git preservou para você. Um deles será seu, outro deles será a versão remota. Você pode usar um editor ou qualquer ferramentas que você gostaria de resolver o conteúdo conflitantes. Quando estiver pronto, git add
os arquivos afetados e se comprometem a concluir a mala.
Se você só quer usar o controle remoto cometer da versão, então você pode simplesmente mover a cópia que você não escrever no lugar e git add
-lo.
Em relação às ferramentas de mesclagem, ter um olhar para git help mergetool
. Basicamente, ele vai tentar correr cada uma das possibilidades incluídas até encontrar um, ou usar um que você explicitamente configurado.
Outras dicas
Eu acho que você só esqueceu switch "-t" na sua linha de comando. De acordo com a página git ajuda que significa "-t, --tool =" assim que faz o que você pretende.
Tente:
git mergetool -t gvimdiff
Claro que você pode usar sua ferramenta de merge preferido em vez de gvimdiff meu, fusão é muito grande ...
Se você executar o merge de um subdiretório do seu projeto, git irá executar o merge para todo seu projeto. No entanto, mergetool só pode ver (e fusão) arquivos em ou abaixo do diretório de trabalho. Então, se essa situação ocorrer, certifique-se que você está tentando executar o seu resolução de conflitos a partir do diretório de nível superior em seu projeto.
E se eu simplesmente querem a versão de git pull para tudo o substituir? Se você quer apenas que você deve usar:
git fetch
git reset --hard origin/your-branch-name