Pular para o conteúdo

Como resolver um conflito de merge no Git

Um conflito não é erro seu: é o Git pedindo que você escolha. Veja como ler as marcas e concluir.

Como resolver um conflito de merge?

Rode git status, abra os arquivos em conflito, escolha o que fica e apague as marcas <<<<<<<, ======= e >>>>>>>. Depois faça git add e git commit.

O que é um conflito

Um conflito acontece quando o Git tenta juntar duas mudanças e não consegue decidir sozinho qual vale: as duas mexeram nas mesmas linhas de um arquivo, ou uma apagou o que a outra alterou. O Git para no meio do merge, marca os arquivos afetados e espera que você decida. Não é sinal de erro seu; é o que acontece quando duas pessoas trabalham no mesmo trecho.

Num fork, o caso típico é este: você fez uma branch há duas semanas, o projeto original mudou o mesmo parágrafo do README, e agora o GitHub avisa que o pull request tem conflitos. Isso se resolve em duas etapas: trazer o original e decidir cada trecho.

Resolvendo na linha de comando

A documentação do GitHub dá a sequência. Ela foi adaptada aqui para a situação de um fork:

  1. Entre na pasta do projeto e traga as novidades do original: git fetch upstream.
  2. Junte-as na sua branch: git merge upstream/main. O Git avisa dos arquivos em conflito.
  3. Rode git status para ver a lista dos arquivos com "unmerged paths".
  4. Abra um arquivo em conflito e procure a marca <<<<<<<.
  5. Escolha o que fica: a sua versão, a do original ou um texto novo que junte os dois. Apague as três marcas: <<<<<<<, ======= e >>>>>>>.
  6. Marque o arquivo como resolvido: git add . (ou git add com o nome do arquivo).
  7. Conclua com git commit. A documentação do GitHub sugere uma mensagem do tipo "Resolve merge conflict by incorporating both suggestions".
  8. Envie: git push. O pull request se atualiza e o aviso de conflito some.

Como ler as marcas

No arquivo, o trecho em conflito aparece em três partes. Entre <<<<<<< e ======= está a sua versão (a branch em que você está); entre ======= e >>>>>>> está a da outra branch. O texto depois de <<<<<<< e de >>>>>>> indica de onde veio cada lado.

Cuidados

  • Não deixe as marcas no arquivo. Se <<<<<<< ficar, ele vai para o commit. Antes do git add, busque as três marcas em cada arquivo.
  • Rode os testes depois de resolver: um conflito mal resolvido pode compilar e ainda assim estar errado.
  • Em dúvida, pergunte a quem escreveu o outro lado, no próprio pull request.
  • Se se perder, git merge --abort desfaz o merge e volta ao estado de antes. Esse comando vem da ajuda do Git, não da página do GitHub que lemos.

Exemplo resolvido: um README com conflito

Depois de git merge upstream/main, o arquivo README.md aparece assim:

<<<<<<< HEAD
Veja o guia atualizado: https://exemplo.org/novo
=======
Veja o guia completo: https://exemplo.org/guia
>>>>>>> upstream/main

O lado de cima é o texto da branch de Maria; o de baixo, o do original. Ela decide ficar com o endereço do original e com a palavra "atualizado", e deixa uma única linha:

Veja o guia atualizado: https://exemplo.org/guia

Depois roda git add README.md, git commit e git push. O fluxo completo, do fork ao pull request, está no passo a passo, e o hábito que evita a maior parte dos conflitos é manter o fork atualizado.

Perguntas frequentes

O que significam as marcas <<<<<<<, ======= e >>>>>>>?

Elas separam as duas versões do trecho em conflito. Entre <<<<<<< e ======= está a versão da branch em que você está; entre ======= e >>>>>>> está a da outra branch. Você as apaga depois de escolher o que fica.

Como desfaço um merge que deu conflito?

Com git merge --abort, que volta ao estado de antes do merge. Foi testado aqui em um repositório de exemplo. O comando vem da ajuda do Git, e não da página do GitHub que lemos para o resto do guia.

O que são unmerged paths no git status?

É a lista de arquivos em que o Git não conseguiu juntar as duas versões e espera a sua decisão. A documentação do GitHub manda rodar git status para ver essa lista e abrir cada arquivo. Quando todos forem resolvidos e marcados com git add, o commit conclui o merge.

Como evito conflitos?

Mantendo o fork atualizado antes de criar cada branch, com pull requests pequenos e rápidos de revisar e conversando com quem mexe nos mesmos arquivos. Não elimina todos, mas reduz muito, segundo a prática comum.

Fontes deste guia

Abertas em 11/10/2026. O texto é nosso, em português; as fontes ficam aqui com link, licença e o que foi lido.

  • Resolving a merge conflict using the command line (GitHub Docs)
    A página não mostra data · aberta em · reconferência: confirmada na abertura (11/10/2026) · licença do conteúdo: CC BY 4.0 (conteúdo); MIT (código)
    O que lemos: Os passos: git status, localizar a marca <<<<<<<, escolher o que ficar e apagar as marcas <<<<<<<, ======= e >>>>>>>, git add e git commit.
    Como usamos: Texto próprio em português; os fatos e os comandos vêm da página, sem copiar trechos. Link e data em cada uso.
  • Syncing a fork (GitHub Docs)
    A página não mostra data · aberta em · reconferência: confirmada na abertura (11/10/2026) · licença do conteúdo: CC BY 4.0 (conteúdo); MIT (código)
    O que lemos: O botão Sync fork, o comando gh repo sync e, na linha de comando, git fetch upstream, git checkout main e git merge upstream/main; avisa que isso só atualiza a cópia local e que é preciso enviar com push.
    Como usamos: Texto próprio em português; os fatos e os comandos vêm da página, sem copiar trechos. Link e data em cada uso.

Informação geral, não é aconselhamento jurídico. Quando um guia cita uma licença de conteúdo, ela vale para a página citada, não para este site.