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
- 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").
- Cria um branch chamado ajuste-a, muda para ele, altera essa linha do README.md para "Estado: quase terminado", e faz commit.
- 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.
- Volta ao main e faz merge de ajuste-a primeiro — deve funcionar sem problemas.
- Agora tenta fazer merge de ajuste-b. O Git vai avisar-te de um conflito nesse ficheiro.
- 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
- 1ajuste-a e ajuste-b alteram a mesma linha
- 2merge de ajuste-a: sem problema
- 3merge de ajuste-b: CONFLITO
- 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.