git / Guias

Como resolver conflitos de merge no Git, passo a passo

Um conflito significa que o Git precisa da sua decisão sobre o conteúdo final. Este exercício usa um repositório descartável com duas edições diferentes da mesma linha.

Os exemplos usam Bash; consulte as referências para os detalhes do seu ambiente.

Crie o conflito

Execute este exercício Bash em um diretório novo e vazio. Os nomes das branches e o arquivo estão limitados a este exemplo.

git init -b main
git config user.name "DevSheet Demo"
git config user.email "demo@example.invalid"
printf "colour=blue\n" > settings.txt
git add settings.txt
git commit -m "Base colour"
git switch -c feature
printf "colour=green\n" > settings.txt
git commit -am "Feature colour"
git switch main
printf "colour=red\n" > settings.txt
git commit -am "Main colour"
git merge feature

O último comando deve parar com um conflito em settings.txt. Um código de saída diferente de zero é esperado neste exercício.

Leia as duas versões

git status --short
git diff -- settings.txt

Procure UU settings.txt. No arquivo, <<<<<<< HEAD inicia o texto da branch atual, ======= separa as versões e >>>>>>> feature encerra o texto recebido. Esses rótulos descrevem este merge comum; um rebase tem outro contexto.

Escreva e revise o conteúdo final

Neste exercício, escolha green. Substitua todo o arquivo em conflito pelo resultado desejado, prepare apenas esse arquivo e confira o que será commitado.

printf "colour=green\n" > settings.txt
git add settings.txt
git diff --cached
git merge --continue
git status --short

Salve a mensagem de merge quando o editor abrir. Resultado esperado: status limpo e um commit de merge. Em um projeto real, combine as alterações conforme o comportamento da aplicação e execute os testes relevantes antes de concluir.

Cancele ou investigue um merge pendente

Enquanto o conflito ainda não foi resolvido, git merge --abort tenta voltar ao estado anterior ao merge. Faça commit ou stash de alterações não relacionadas antes de começar: o cancelamento pode não reconstruir edições que já existiam.

Preparar um arquivo informa ao Git que você resolveu o conflito, mesmo se ainda houver marcadores. Leia o diff preparado. Arquivos binários, conflitos de exclusão/modificação e renomeações exigem decisões próprias; substituir uma linha de texto não resolve esses casos.

Referências

Todos os guias