- 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-ARQUIVOpara escolher uma das modificações se achar necessário:diffg LOutiliza o diff de LO CAL:diffg BAutiliza o diff de BA SE (raro ser usado):diffg REutiliza 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-walterna janelas[ce]cpula entre os diffsdpsimplifica:diffputedo(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]cedo
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