- Com Vimdiff devidamente configurado
git config merge.tool vimdiff
, executegit mergetool
- O terminal renderizará com 4 janelas, sendo as 3 de cima representando em ordem e a ultima:
- O arquivo LOCAL antes do conflito
- O arquivo BASE (comum) do local e ao remoto
- O arquivo vindo do REMOTE.
- Em baixo como o arquivo está sendo mergeado para o commit
- De preferência mantenha seu cursor de preferencia sempre na janela maior
- Acesse algum diff
- Utilize
:diffg NOME-DO-ARQUIVO
para escolher uma das modificações se achar necessário:diffg LO
utiliza o diff de LO CAL:diffg BA
utiliza o diff de BA SE (raro ser usado):diffg RE
utiliza o diff de RE MOTE- Ou altere o arquivo na mão
- Ao finalizar todas modificações que julgar necessário SALVE e SAIA com
:wqa
- Se existir, um novo arquivo com conflito será aberto, do contrário ficará no terminal aguardando commit
Desistência
- Caso queira cancelar, saia com
:cq
- Aborte o merge com
git merge --abort
Atalhos úteis
ctrl-w-w
alterna janelas[c
e]c
pula entre os diffsdp
simplifica:diffput
edo
(diff obtains) simplifica:diffget
, caso não seja necessário o nome do buffer (ideal com diffconflicts)
Alternativas
diffconflicts
Plugin de vim/nvim que simplifica o diff entre os arquivos abertos. Tendo somente duas janelas: ours e theirs, sendo a primeira a que deve ser atualizada. A ideia é interessante pois simplifica a quantidade de janelas para a efetividade do diff e por padrão ja presupoe que ours
é correto. Basta alterar a janela especificada e fechar para confirmar com :xa
ou :cq
para abortar aquele arquivo.
Lembre de utilizar
[c
]c
edo
Exemplo prático
Para validar estratégias de merge tool, recomendo meu projeto exemplo_vim-merge-conflict com as instruções de como forçar conflitos