Pular para o conteúdo
Cursos

DevClub

LógicaFront-endBack-endMobile

IA Club

IA na prática
Estudar programaçãoEstudar IA

Aula 4 de 6

Trabalhe em branches e resolva um conflito de merge

Crie linhas de trabalho, compare fast-forward e merge commit e resolva um conflito proposital sem apagar a intenção de nenhuma branch.

38 minutos · leitura + prática · nível iniciante

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:

bash
git switch -c feat/frete-expresso
git branch -vv

O 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:

bash
git switch main
git merge feat/frete-expresso

O 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:

js
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.

bash
git status --short
git add precos.js
git commit -m "merge: concilia modalidades de frete"
git --no-pager log --oneline --graph --all -6

O 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?

Escolha uma resposta
Missão da aula

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 →