Neovim e conflitos de merge
Tags: vim, git, merge
Published: 2021-09-12 00:10:35

## 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 
```
#### 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/60aa4ag90nnoe6rvuj1b.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7tff1oyzjh0zw15l848n.png)

Continua na tranquilidade e faz o merge do branch test2:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h5yywvz0ruhkr4kzy73j.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0nmohcvgt6bsxsqfuv4m.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ba52owg0obkr7zot4e8d.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/29msywlfp418lg5f4cwj.png)

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.