Skip to content
Git e GitHubModo de leitura focado
DifícilFase 7

Exercício Difícil — Provocar e Resolver um Conflito de Merge

Cria de propósito um conflito entre dois branches, e resolve-o manualmente, linha a linha.

FerramentasGitVS CodeTerminal

Um conflito de merge acontece quando dois branches alteram a mesma linha do mesmo ficheiro de forma diferente, e o Git não consegue decidir sozinho qual versão manter. Este exercício provoca esse cenário de propósito, num ambiente seguro, para não teres medo dele da primeira vez que acontecer a sério.

Passos a realizar

  1. No repositório diario-de-bordo, garante que estás no main, e que o ficheiro README.md tem pelo menos uma linha de texto simples (ex: "Estado: em progresso").
  2. Cria um branch chamado ajuste-a, muda para ele, altera essa linha do README.md para "Estado: quase terminado", e faz commit.
  3. Volta ao main (git checkout main) e cria um segundo branch, ajuste-b, a partir daqui — ou seja, ajuste-b não tem a alteração do ajuste-a. Altera a mesma linha do README.md para "Estado: em revisão", e faz commit.
  4. Volta ao main e faz merge de ajuste-a primeiro — deve funcionar sem problemas.
  5. Agora tenta fazer merge de ajuste-b. O Git vai avisar-te de um conflito nesse ficheiro.
  6. Abre o README.md no VS Code — vais ver marcadores especiais (<<<<<<<, =======, >>>>>>>) a mostrar as duas versões em conflito. Edita o ficheiro manualmente para decidir o texto final (podes escolher uma das duas versões, ou escrever uma terceira), remove os marcadores, guarda, e completa o merge com git add README.md seguido de git commit.

Fluxo de funcionamento

  1. 1ajuste-a e ajuste-b alteram a mesma linha
  2. 2merge de ajuste-a: sem problema
  3. 3merge de ajuste-b: CONFLITO
  4. 4Editar, remover marcadores, add + commit

Dicas

  • Um conflito não é um erro que quebrou algo — é o Git a pedir-te, com razão, uma decisão que só um humano consegue tomar. Lê-o com calma, sem entrar em pânico.
  • Depois de resolveres um conflito, confirma sempre com git log --oneline --graph que o histórico ficou como esperavas — vais ver os dois branches a juntarem-se visualmente.

Erros comuns

  • Esquecer de remover os marcadores <<<<<<< / ======= / >>>>>>> antes de guardar, deixando-os literalmente no ficheiro final.
  • Entrar em pânico e cancelar o merge com git merge --abort sem sequer tentar perceber o conflito — é uma opção válida em código real complexo, mas neste exercício o objetivo é praticar a resolução.

As minhas dúvidas

Voltar à vista da fase