Ao terminar esta aula, você vai conseguir
- Explicar branch como referência para commit
- Distinguir fast-forward de merge commit
- Resolver e abortar um conflito com segurança
Ao final desta aula, você consegue trabalhar numa tarefa sem mover a main e
consegue integrar duas decisões que editaram a mesma linha. O conflito será
provocado de propósito num diretório temporário; aprender a lê-lo em ambiente
seguro é melhor que encontrar os marcadores pela primeira vez durante uma
entrega.
Branch é uma referência que aponta para commit. Criá-la não duplica toda a
pasta. Pense num marcador colocado num capítulo: main e feat/frete podem
começar no mesmo ponto e avançar para capítulos diferentes. A analogia termina
quando aparece o grafo: commits podem ter mais de um pai, algo que um livro
linear não representa.
Crie a tarefa e confira os ponteiros:
git switch -c feat/frete-expresso
git branch -vvO asterisco marca a branch atual. Faça um commit que muda precos.js de
frete = 12 para frete = 18. Volte à main e observe que o arquivo retorna ao
conteúdo do commit de main. Isso não apagou a feature; apenas atualizou a
working tree para outra referência.
Se main não avançou, git merge --ff-only feat/frete-expresso faz
fast-forward: move o nome main para o commit da feature, sem criar outro commit.
Agora desfaça apenas no laboratório ou monte outro repositório para provocar
divergência. Em main, mude a tarifa para 15 e faça commit. Na feature, mantenha
18. Então execute:
git switch main
git merge feat/frete-expressoO Git responde CONFLICT (content) e deixa marcadores em precos.js. Acima de
======= fica o lado de HEAD, a branch atual. Abaixo fica a branch integrada.
Não escolha “o meu” por reflexo. A regra da livraria pode exigir tarifa padrão
e expressa, portanto uma resolução coerente seria:
export const fretePadrao = 15;
export const freteExpresso = 18;Remova todos os marcadores, rode os testes e procure por <<<<<<< no projeto.
Só depois prepare o arquivo. Durante conflito, git add significa “aceito este
conteúdo como resolução”. Ele não corrige nada sozinho.
git status --short
git add precos.js
git commit -m "merge: concilia modalidades de frete"
git --no-pager log --oneline --graph --all -6O grafo final deve mostrar um nó de merge com duas linhas chegando. Explique qual é o primeiro pai e qual é a feature. Esse desenho distingue merge commit de fast-forward sem depender de um botão visual.
Se você percebeu que iniciou na branch errada ou ainda não tem informação para
decidir, use git merge --abort. O comando volta ao estado anterior ao merge.
Comece sempre com working tree limpa, porque alterações pré-existentes podem
dificultar a volta.
O erro mais comum é apagar os marcadores até o JavaScript compilar, sem verificar se uma decisão sumiu. Outro é resolver lockfile escolhendo um lado inteiro. Quando possível, resolva primeiro o manifesto e regenere o arquivo com a ferramenta oficial. Conteúdo gerado ainda precisa ser reproduzível.
Conclua o desafio duas vezes: na primeira, resolva; na segunda, aborte e confira
o hash de main. A aula termina quando você prevê se o próximo merge será
fast-forward, merge commit ou conflito olhando somente o grafo.
Pare e pense
Por que o Git interrompe um merge quando duas branches alteram a mesma região?
O Git combina texto e ancestralidade, mas não sabe qual tarifa ou comportamento o produto precisa. A pessoa resolve, testa e marca o resultado.
Faça sem copiar
Provoque um conflito em um arquivo de preços, preserve as duas modalidades na resolução e prove no log --graph que o merge final possui dois pais.
Fontes para consultar
Terminou a missão?
Marque apenas quando você conseguir explicar o conceito e concluir o desafio. O progresso fica salvo somente neste navegador.
Próxima: Recupere mudanças e reorganize uma branch com segurança →