Introdução à resolução de conflitos de mesclagem no GIT

Gerenciar contribuições para resolver conflitos entre vários desenvolvedores distribuídos é um dos principais trabalhos dos sistemas de controle de versão. Para resolver conflitos de mesclagem, primeiro precisamos entender o que exatamente é. Ele surge durante a mesclagem de versões diferentes do mesmo código e é gerenciado pelo sistema de controle de versão, principalmente quando um desenvolvedor exclui um arquivo enquanto outro desenvolvedor ainda o estava modificando ou quando várias pessoas tentam alterar a mesma linha em um arquivo. Neste artigo, conheceremos mais sobre os conflitos de mesclagem do Git, o que causa e como pode ser resolvido.

O que é conflito de mesclagem no GIT?

O Git tornou a fusão muito fácil, pois integra automaticamente novas alterações usando o comando git merge. Mas, no caso de conflitos, apenas o desenvolvedor que está mesclando está ciente do conflito, enquanto os outros desconhecem. Então, o que o Git faz é interromper o processo de mesclagem e sinalizar o arquivo como tendo conflitos. O desenvolvedor encontra e resolve o conflito. Conflitos durante a mesclagem podem ocorrer das maneiras descritas abaixo:

  • Falha ao iniciar a mesclagem

No caso de alterações pendentes no diretório de trabalho do projeto atual, uma mesclagem pode falhar, pois elas podem ser substituídas pelas confirmações durante a mesclagem. Mas pode ser estabilizado usando vários comandos git, como git checkout / stash / reset / commit.

  • Falha durante a mesclagem

Se houver uma falha durante a mesclagem, isso indica que há um conflito entre a ramificação que está sendo mesclada e a ramificação atual. Embora o Git tente mesclar os arquivos sem conflitos, mas se não for possível, ficará a seu critério resolvê-lo manualmente.

Como criar um conflito de mesclagem de arquivos?

Vamos dar um exemplo para mostrar / resolver conflitos de mesclagem no GIT usando a interface Git da linha de comando.

$ mkdir git-merge-test
$ cd git-merge-test
$ git init
$ echo "Mess with this content" > new_merged.txt
$ git add new_merged.txt
$ git commit -am"Committed the earlier content"
(master (root-commit) d58f73b) Committed the earlier content
1 file changed, 1 insertion(+)
create mode 200548 new_merged.txt

Vamos ver linha por linha o que está acontecendo no snippet de comandos acima.

  • O git-merge-test cria um novo diretório e inicializa um novo repositório Git.
  • Em seguida, crie um arquivo de texto chamado new_merged.txt com algo escrito nele.
  • Adicione o texto recém-criado ao repositório e, em seguida, confirme-o.

Agora temos um novo repositório com uma ramificação principal e um arquivo new_merged.txt com algum conteúdo. Em seguida, criamos outro ramo que entrará em conflito com a mesclagem.

$ git checkout -b newbranch
$ echo "New content" > new_merged.txt
$ git commit -am"Same named file is edited to cause a conflict"
(newbranch 6282319) Same named file is edited to cause a conflict
1 file changed, 1 insertion(+), 1 deletion(-)

Para dividir com você, as linhas acima:

  • cria e faz check-out de um newbranch chamado newbranch.
  • substitui o conteúdo do arquivo new_merged.txt.
  • e finalmente confirma o conteúdo recém-criado.

Com o newbranch nomeado um ramo, é criada uma confirmação que substitui o conteúdo em new_merged.txt

$ git checkout master
Switched to branch 'master'
$ echo "Append" >> new_merged.txt
$ git commit -am"Content appended new_merged.txt"
(master 24fbe3c) Content appended new_merged.txt
1 file changed, 1 insertion(+)

A sequência de comandos acima não apenas faz check-out do ramo principal, adiciona conteúdo ao new_merged.txt, mas também o confirma no final. Agora, nosso exemplo tem 2 novos commits. Um está no ramo principal e outro no ramo novo. Agora, git mescla o newbranch para ver o que acontece!

$ git merge newbranch
Auto-merging new_merged.txt
CONFLICT (content): Merge conflict in new_merged.txt
Automatic merge failed; fix conflicts and then commit the result.

Git nos mostra que o conflito apareceu.

Resolvendo conflitos de mesclagem no GIT

A edição do arquivo em conflito é uma das maneiras de remover um conflito de mesclagem. Basta abrir o arquivo em conflito no editor e remover os divisores de conflitos um por um. Uma vez editado, você pode usar o git add para adicionar o conteúdo modificado. Um novo commit pode ser criado executando:

git commit -m "merged and resolved the conflict in "

O Git garante a resolução do conflito e, assim, cria uma nova mesclagem confirmada para finalizá-lo. Alguns dos comandos Git que ajudam a resolver conflitos de mesclagem são:

git log --merge

O comando merge –abort passado com o comando git log produz uma lista de confirmações conflitantes entre ramificações mescladas.

git status

Ajuda a identificar arquivos em conflito.

git diff

Ajuda a encontrar diferenças entre os estados de um repositório ou arquivo. É usado para prever e impedir conflitos de mesclagem. Algumas ferramentas como as fornecidas abaixo são usadas ao iniciar uma falha de mesclagem.

git reset --mixed

É usado para desfazer as alterações feitas no diretório atual.

git checkout

É usado para desfazer as alterações nos arquivos ou com mais frequência para alterar ramificações. Algumas ferramentas como as fornecidas abaixo são usadas quando surgem conflitos durante uma mesclagem.

git reset

É usado para redefinir arquivos em conflito durante um conflito de mesclagem.

git merge --abort

Passar o argumento –abort com git merge permite sair do processo de mesclagem e retornar a ramificação ao seu estado original.

Vantagens de resolver conflitos do Git Merge

  • É usado para criar, modificar, excluir ramificações, arquivos ou repositórios sem conflitos.
  • Pode ser usado para mesclar diferentes versões do código.
  • Também ajuda a fazer alterações e efetuar check-out de filiais remotas, evitando simultaneamente conflitos.
  • Ajuda a gerenciar e manipular lançamentos sem conflitos.
  • Mantém o repositório e o processo limpos e legíveis.

Conclusão

O Git tem muitos usos e é amplamente utilizado por desenvolvedores, gerentes de produto e cientistas de dados. Os comandos Git são muito eficazes e podem ser muito úteis. Um conflito no git surge quando duas ramificações diferentes tentam editar a mesma linha em um arquivo ou um arquivo é excluído em uma ramificação específica, mas editado em outra. O Git lida com a maioria das mesclagens com sucesso com seus recursos de mesclagem, mas também pode ser resolvido manualmente usando ferramentas como status git, git reset, git checkout e log do Git.

Artigos recomendados

Este é um guia para resolver conflitos de mesclagem no GIT. Aqui, discutiremos como resolver com eficiência os conflitos do Git Merge com vários comandos, além de suas vantagens. Você também pode consultar nossos outros artigos sugeridos para saber mais -

  1. Alternativas Git com vantagens
  2. Introdução ao Git Tools
  3. GitHub vs SVN - Principais Diferenças
  4. As 11 principais perguntas da entrevista do GIT
  5. Git Push
  6. Versões do Tableau
  7. Guia completo do comando remoto Git
  8. Três estágios do ciclo de vida do Git com o fluxo de trabalho

Categoria: