DEV Community

Cover image for Neovim e conflitos de merge
Paulo Giovani
Paulo Giovani

Posted on

Neovim e conflitos de merge

Uma forma de resolver conflitos de merge do Git

De todos os editores que já usei, foi do Neovim que mais gostei. Sim, eu gosto do Vim e Neovim. Como Andrew Hunt e David Thomas escreveram no clássico livro O Programado Pragmático, você escolhe seu editor como um artesão escolhe suas ferramentas. E treina até se tornar mestre nela.

Optei pelo Neovim em 2021 e até agora só alegria. Admito que a curva de aprendizagem dele é mais alta que a de um VSCode. Por outro lado, me divertido e aprendo muito ao customizá-lo. E quando o assunto é Git, o Neovim me ajuda bastante. E não é só do famoso plugin vim-fugitive do Tim Pope que me refiro.

Com a configuração abaixo no .gitconfig, é possível transformar o Neovim em uma poderosa ferramenta para auxiliar na resolução de conflitos de merge.

[mergetool "nvim"]
  cmd = nvim -f -c \"Gvdiffsplit!\" \"$MERGED\"
[merge]
  tool = nvim 
Enter fullscreen mode Exit fullscreen mode

Vamos a um teste?

Digamos que temos um pequeno programa em Ruby, como abaixo, no branch master. E já fizemos o primeiro commit nele.

Alt Text

Agora, mudamos para o branch test1 com git checkout -b test1. Vamos incluir mais um personagem no array de hobbits, Fredegar.

hobbits = %w[Frodo Sam Merry Pippin Bilbo Rosinha Fredegar]

Em seguida o commit dessa alteração com git commit -am 'added Fredegar', já que o arquivo aparece com status de modificado.

Concomitante ao branch test1, digamos que outra pessoa vez git checkout -b test2 e realizou a seguinte inclusão no array:

hobbits = %w[Frodo Sam Merry Pippin Bilbo Rosinha Gandalf]

E completa com git commit -am 'added Gandalf'.

Hora de fazer merge no master 👀 🙈 🥶

Você vem na tranquilidade e faz o merge da branch test1:

Alt Text

Continua na tranquilidade e faz o merge do branch test2:

Alt Text

Eita! Deu conflito. E o Neovim irá ajudar a resolver. Vamos ver o que aconteceu.

Primeiro, vamos digitar git mergetools no terminal e boom!!

Alt Text

O Neovim é aberto com splits verticais. Da esquerda para direita está primeiro a alteração apontando para o HEAD (foi a inclusão de Fredegar), depois o arquivo a ser editado com a resolução do conflito e por último o arquivo que gerou conflito apontando para a branch test2.

Conversamos com a pessoa e explicamos que além de commitar na mesma linha, ela inseriu Gandalf na lista de hobbits. O mago e os hobbits vão ficar retados. Vamos corrigir.

Alt Text

Pronto. Quem deve constar na lista é Fredegar. Deletamos as outras linhas e salvamos o arquivo.

Terminou? Ainda não. Depois de salvar, faremos o commit da "conciliação" para selar a paz e registrar as correções.

Alt Text

Agora sim! Conflito resolvido 😎.

Enfim, existe outras formas de realizar essa atividade. Essa é uma delas. Que particularmente gosto. Espero que o meu aprendizado possa te ajudar a resolver conflitos de merge que aparecerem.

Discussion (0)