Vimdiff como mergetool

fixme
  1. Com Vimdiff devidamente configurado git config merge.tool vimdiff, execute git mergetool
  2. O terminal renderizará com 4 janelas, sendo as 3 de cima representando em ordem e a ultima:
    1. O arquivo LOCAL antes do conflito
    2. O arquivo BASE (comum) do local e ao remoto
    3. O arquivo vindo do REMOTE.
    4. Em baixo como o arquivo está sendo mergeado para o commit
  3. De preferência mantenha seu cursor de preferencia sempre na janela maior
  4. Acesse algum diff
  5. 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
  6. Ao finalizar todas modificações que julgar necessário SALVE e SAIA com :wqa
  7. Se existir, um novo arquivo com conflito será aberto, do contrário ficará no terminal aguardando commit

Desistência

  1. Caso queira cancelar, saia com :cq
  2. Aborte o merge com git merge --abort

Atalhos úteis

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.

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