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.txt→ Conflito (alterado em ambos os branches na mesma linha).arquivo2.txt→ Conflito (alterado em ambos os branches na mesma linha).arquivo3.txt→ Sem conflito (alterado apenas no branchnova-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.txtAgora, adicione os arquivos e faça o primeiro commit:
git add arquivo1.txt arquivo2.txt arquivo3.txt
git commit -m "Commit inicial com três arquivos"Passo 2: Crie e Modifique o Branch nova-feature
nova-featureCrie o branch nova-feature e faça alterações nele:
git switch -c nova-featureAltere os arquivos:
🔹 Linux/macOS
echo "Alteração no branch nova-feature" > arquivo1.txt
echo "Alteração no branch nova-feature" > arquivo2.txt
echo "Nova linha no arquivo 3" >> arquivo3.txt🔹 Windows (CMD/PowerShell)
echo Alteração no branch nova-feature > arquivo1.txt
echo Alteração no branch nova-feature > arquivo2.txt
echo Nova linha no arquivo 3 >> arquivo3.txtAdicione os arquivos alterados e faço o commit:
git add arquivo1.txt arquivo2.txt arquivo3.txt
git commit -m "Modificações no branch nova-feature"Passo 3: Modifique o Branch main
mainVolte para o branch main e faça outras alterações nos mesmos arquivos:
git switch mainAltere os arquivos:
🔹 Linux/macOS
echo "Alteração no branch main" > arquivo1.txt
echo "Alteração no branch main" > arquivo2.txt🔹 Windows (CMD/PowerShell)
echo Alteração no branch main > arquivo1.txt
echo Alteração no branch main > arquivo2.txtAdicione os arquivos alterados e faço o commit:
git add arquivo1.txt arquivo2.txt
git commit -m "Modificações no branch main"Passo 4: Inicie o Merge
Agora, tente mesclar o branch nova-feature no main:
git merge nova-featureO Git responderá com um erro porque há conflitos:
Auto-merging arquivo3.txt
Merge made by the 'recursive' strategy.
Auto-merging arquivo1.txt
CONFLICT (content): Merge conflict in arquivo1.txt
Auto-merging arquivo2.txt
CONFLICT (content): Merge conflict in arquivo2.txt
Automatic merge failed; fix conflicts and then commit the result.📌 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:
git statusSaída:
On branch main
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: arquivo1.txt
both modified: arquivo2.txt
Changes not staged for commit:
modified: arquivo3.txt📌 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:
git statusSaída:
On branch main
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: arquivo1.txt
both modified: arquivo2.txtIsso 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
arquivo1.txtSe abrir arquivo1.txt, verá algo assim:
<<<<<<< HEAD
Alteração no branch main
=======
Alteração no branch nova-feature
>>>>>>> nova-featureAqui 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 branchnova-feature
Agora, é preciso escolher como você quer resolver. Existem três opções:
Manter a versão do
mainAlteração no branch mainManter a versão do
nova-featureAlteração no branch nova-featureCombinar as duas versões (uma abordagem comum)
Alteração combinada: main + nova-feature
Escolha a opção 3 e remova os marcadores (<<<<<<<, =======, >>>>>>>).
Salve e feche o arquivo.
Corrija o arquivo2.txt
arquivo2.txtAbra arquivo2.txt e você verá algo parecido:
<<<<<<< HEAD
Alteração no branch main
=======
Alteração no branch nova-feature
>>>>>>> nova-featureNovamente, existem três opções:
Manter a versão do
mainAlteração no branch mainManter a versão do
nova-featureAlteração no branch nova-featureCombinar as duas versões
Alteração combinada no arquivo 2: main + nova-feature
Escolha a opção 3 e removemos os marcadores (<<<<<<<, =======, >>>>>>>).
Salve e feche o arquivo.
Agora os arquivos corrigidos devem estar assim:
arquivo1.txt (resolvido)
Alteração combinada: main + nova-featurearquivo2.txt (resolvido)
Alteração combinada no arquivo 2: main + nova-featurePasso 7: Marque os Conflitos como Resolvidos
Adicionamos os arquivos à área de stage para sinalizar ao Git que os arquivos não possuem mais conflitos:
git add arquivo1.txt arquivo2.txt📌 O arquivo3.txt já está pronto, então você não precisa mexer nele.
Passo 8: Finalize o Merge
Crie o commit de merge:
git commit -m "Merge do branch nova-feature"Agora o merge está concluído! 🚀
Passo 9: Conferir o Histórico
Rode:
git log --onelineSaída esperada:
abc1234 Merge branch 'nova-feature'
def5678 Modificações no branch nova-feature
ghi9012 Modificações no branch main
jkl3456 Commit inicial com três arquivosO commit abc1234 representa o merge e contém:
Os arquivos corrigidos manualmente (
arquivo1.txtearquivo2.txt).O arquivo mesclado automaticamente (
arquivo3.txt).
Atualizado
Isto foi útil?

