3.3.5 Exemplo Prático

Cenário

Teremos um repositório Git com um branch principal chamado main e um branch nova-feature. Ambos os branches modificam três arquivos:

  • arquivo1.txtConflito (alterado em ambos os branches na mesma linha).

  • arquivo2.txtConflito (alterado em ambos os branches na mesma linha).

  • arquivo3.txtSem conflito (alterado apenas no branch nova-feature).

Passo a Passo

Passo 1: Crie o Repositório e os Arquivos

🔹 Linux/macOS

git init merge-exemplo
cd merge-exemplo
echo "Versão inicial do arquivo 1" > arquivo1.txt
echo "Versão inicial do arquivo 2" > arquivo2.txt
echo "Versão inicial do arquivo 3" > arquivo3.txt

🔹 Windows (CMD/PowerShell)

git init merge-exemplo
cd merge-exemplo
echo Versão inicial do arquivo 1 > arquivo1.txt
echo Versão inicial do arquivo 2 > arquivo2.txt
echo Versão inicial do arquivo 3 > arquivo3.txt

Agora, adicione os arquivos e faça o primeiro commit:

Passo 2: Crie e Modifique o Branch nova-feature

Crie o branch nova-feature e faça alterações nele:

Altere os arquivos:

🔹 Linux/macOS

🔹 Windows (CMD/PowerShell)

Adicione os arquivos alterados e faço o commit:

Passo 3: Modifique o Branch main

Volte para o branch main e faça outras alterações nos mesmos arquivos:

Altere os arquivos:

🔹 Linux/macOS

🔹 Windows (CMD/PowerShell)

Adicione os arquivos alterados e faço o commit:

Passo 4: Inicie o Merge

Agora, tente mesclar o branch nova-feature no main:

O Git responderá com um erro porque há conflitos:

📌 O Git mesclará automaticamente o arquivo3.txt, mas os arquivos arquivo1.txt e arquivo2.txt precisarão ser resolvidos manualmente.

Passo 5: Verifique os Conflitos

Rode o comando:

Saída:

📌 O arquivo3.txt já foi mesclado automaticamente e está pronto. Os outros dois precisam ser corrigidos.

Passo 6: Resolva os Conflitos

Agora você precisa corrigir os conflitos nos arquivos arquivo1.txt e arquivo2.txt.

Rode o comando:

Saída:

Isso significa que ambos os arquivos foram modificados em ambos os branches na mesma parte do código, e o Git não sabe qual versão escolher.

Corrija o arquivo1.txt

Se abrir arquivo1.txt, verá algo assim:

Aqui está o que essas marcações significam:

  • <<<<<<< HEAD → Parte que veio do branch atual (main)

  • ======= → Separação entre as duas versões

  • >>>>>>> nova-feature → Parte que veio do branch nova-feature

Agora, é preciso escolher como você quer resolver. Existem três opções:

  1. Manter a versão do main

  2. Manter a versão do nova-feature

  3. Combinar as duas versões (uma abordagem comum)

Escolha a opção 3 e remova os marcadores (<<<<<<<, =======, >>>>>>>).

Salve e feche o arquivo.

Corrija o arquivo2.txt

Abra arquivo2.txt e você verá algo parecido:

Novamente, existem três opções:

  1. Manter a versão do main

  2. Manter a versão do nova-feature

  3. Combinar as duas versões

Escolha a opção 3 e removemos os marcadores (<<<<<<<, =======, >>>>>>>).

Salve e feche o arquivo.

Agora os arquivos corrigidos devem estar assim:

arquivo1.txt (resolvido)

arquivo2.txt (resolvido)

Passo 7: Marque os Conflitos como Resolvidos

Adicionamos os arquivos à área de stage para sinalizar ao Git que os arquivos não possuem mais conflitos:

📌 O arquivo3.txt já está pronto, então você não precisa mexer nele.

Passo 8: Finalize o Merge

Crie o commit de merge:

Agora o merge está concluído! 🚀

Passo 9: Conferir o Histórico

Rode:

Saída esperada:

O commit abc1234 representa o merge e contém:

  • Os arquivos corrigidos manualmente (arquivo1.txt e arquivo2.txt).

  • O arquivo mesclado automaticamente (arquivo3.txt).

Atualizado

Isto foi útil?