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.

Do your career a big favor. Join DEV. (The website you're on right now)

It takes one minute, it's free, and is worth it for your career.

Get started

Community matters

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay