DEV Community

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

Posted on

2 1

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.

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs