Trilha de aprendizado · Nível 2 · Tutorial 3

Resolver conflitos simples de merge

Resolver um conflito de alterações no mesmo trecho de um arquivo de texto e concluir o merge com o conteúdo conferido.

  • Nível: Iniciante
  • Duração: 20 min
  • 7 passos
Resolver conflitos simples de merge

O que você vai percorrer

  1. Reconhecer um merge interrompido por conflito Reconheça uma integração pendente e use git status para localizar o arquivo que precisa de resolução manual. 2 min
  2. Entender as duas versões no arquivo Identifique a origem de cada trecho de um conflito pelos marcadores, sem confundir posição com correção. 3 min
  3. Editar o conteúdo que deve permanecer Transforme as versões em conflito no conteúdo solicitado, preservando as informações necessárias e salvando o arquivo sem marcadores. 4 min
  4. Conferir se a resolução está correta Revise o arquivo inteiro para encontrar marcadores restantes, informações perdidas e conteúdo que não corresponde ao resultado esperado. 3 min
  5. Sinalizar e revisar a resolução Prepare o arquivo corrigido, confirme que não restam caminhos não mesclados e revise as alterações antes de concluir a integração. 3 min
  6. Concluir o merge e verificar o registro Finalize a integração revisada e confirme a conclusão pelo estado do repositório, pelo histórico e pelo conteúdo do arquivo. 3 min
  7. Prática final: resolver do início ao fim Resolva um novo conflito em um ambiente local isolado e reúna evidências de que o conteúdo está correto e o merge foi concluído. 4 min

O que você vai aprender

  • Identificar um merge interrompido por conflito e localizar os arquivos que precisam de resolução.
  • Interpretar os marcadores de conflito, distinguindo o trecho da branch atual daquele da branch integrada.
  • Editar o arquivo para produzir o resultado desejado, removendo todos os marcadores de conflito.
  • Conferir o conteúdo resolvido, prepará-lo com git add e concluir o merge com git commit.

Antes de começar

  • Integrar branches locais com merge

Passo 1 de 7

Reconhecer um merge interrompido por conflito

Reconheça uma integração pendente e use git status para localizar o arquivo que precisa de resolução manual.

Quando a combinação automática para

Um cenário local de treino

Considere um repositório já preparado: as branches main e ajuste-horario têm mudanças diferentes na mesma linha do arquivo fictício aviso.txt, todas já commitadas. Antes do merge, não havia alterações pendentes. Na branch atual, main, foi executado o comando abaixo.

Comando e saída traduzida e abreviada

plaintext
$ git merge ajuste-horario
CONFLITO (conteúdo): conflito de mesclagem em aviso.txt
A mesclagem automática falhou.

O merge ainda está em andamento

O conflito ocorre porque o Git não consegue combinar automaticamente mudanças incompatíveis no mesmo trecho. A mensagem indica que a integração não foi concluída: há uma divergência que exige resolução manual.

Interprete a interrupção

O que essa falha significa?

A mensagem de falha significa que o Git encerrou o merge e não há mais integração pendente.

Localize o arquivo com git status

Consulte git status na pasta do repositório. Neste cenário, a seção Caminhos não mesclados identifica os arquivos cuja resolução ainda está pendente.

Comando e saída traduzida e abreviada

plaintext
$ git status
No ramo main
Você tem caminhos não mesclados.

Caminhos não mesclados:
  ambos modificados: aviso.txt

Leia o estado e o caminho

  • No ramo main: identifica a branch atual.
  • Caminhos não mesclados: aponta pendências de resolução neste merge.
  • ambos modificados: aviso.txt: as duas branches alteraram esse arquivo e o Git não conseguiu combinar todas as mudanças. O caminho a examinar é aviso.txt.

Diagnostique outro caso

Outro exemplo local — saídas traduzidas e abreviadas

plaintext
$ git merge atualiza-agenda
CONFLITO (conteúdo): conflito de mesclagem em docs/agenda.txt
A mesclagem automática falhou.

$ git status
No ramo main
Caminhos não mesclados:
  ambos modificados: docs/agenda.txt

Qual é o diagnóstico?

Com base nessas saídas, qual afirmação está correta?

Passo 2 de 7

Entender as duas versões no arquivo

Identifique a origem de cada trecho de um conflito pelos marcadores, sem confundir posição com correção.

Leia o bloco de conflito

Neste exemplo, o merge de ajuste-horario foi iniciado na branch main. Veja como ficou o arquivo fictício aviso.txt. Por enquanto, apenas identifique as duas versões, sem editar.

aviso.txt

plaintext
Atendimento
<<<<<<< HEAD
Horário: das 9h às 18h.
=======
Horário: das 10h às 19h.
>>>>>>> ajuste-horario
Local: recepção.

Três marcadores, duas versões

  • <<<<<<< HEAD inicia o bloco. O trecho até ======= vem da branch atual, main, que recebe a integração.
  • ======= separa as duas versões.
  • O trecho entre ======= e >>>>>>> ajuste-horario vem da branch integrada, ajuste-horario. O último marcador encerra o bloco e identifica essa branch.

Associe os marcadores e os trechos

Consulte o bloco de aviso.txt

plaintext
<<<<<<< HEAD
Horário: das 9h às 18h.
=======
Horário: das 10h às 19h.
>>>>>>> ajuste-horario

O que cada parte representa?

Associe cada linha à sua função ou origem neste merge.

Toque em um item e depois no par correspondente.

Origem não significa correção

Nenhuma versão vence pela posição

Os marcadores mostram de onde vem cada versão, não qual está correta. O trecho de HEAD não tem prioridade por aparecer primeiro, e o trecho da branch integrada não tem prioridade por vir depois.

Dica

O arquivo continua fora do bloco

No exemplo, Atendimento e Local: recepção. estão fora dos marcadores. Essas linhas também fazem parte de aviso.txt: não são versões concorrentes desse bloco e não devem ser descartadas ao resolver o conflito.

Confira sua interpretação

Verdadeiro ou falso?

Como a versão de HEAD aparece primeiro no bloco, ela é a versão que o Git considera correta.

Passo 3 de 7

Editar o conteúdo que deve permanecer

Transforme as versões em conflito no conteúdo solicitado, preservando as informações necessárias e salvando o arquivo sem marcadores.

A intenção orienta a edição

O que precisa ficar?

Resolver o conflito não é escolher automaticamente a branch atual ou a integrada. O conteúdo final deve atender à intenção da mudança.

Você pode:

  • Escolher uma versão, quando ela já contém o resultado desejado.
  • Combinar informações compatíveis das duas versões.
  • Reescrever o trecho, quando nenhuma versão expressa bem o resultado esperado.

Dica

Não adivinhe a intenção

Se não houver informação suficiente para decidir, esclareça o resultado esperado com quem solicitou a mudança antes de editar.

Quando falta uma decisão

Qual é o próximo passo?

Um aviso informa que uma reunião começa às 9h na versão da branch atual e às 10h na versão da branch integrada. Não há orientação sobre qual horário deve valer. O que fazer?

Da intenção ao arquivo editado

Combine apenas o que faz sentido

Neste exemplo fictício, o pedido para aviso.txt é claro: o encontro começa às 10h e a entrada é gratuita. Nenhuma das versões abaixo atende sozinha ao pedido completo.

Antes da edição — aviso.txt

text
Encontro da comunidade
<<<<<<< HEAD
O encontro começa às 10h.
=======
O encontro começa às 9h. A entrada é gratuita.
>>>>>>> atualizar-aviso
Local: salão principal.

Depois da edição — aviso.txt

text
Encontro da comunidade
O encontro começa às 10h. A entrada é gratuita.
Local: salão principal.

Dica

Como fazer no editor

Substitua o bloco completo pelo texto final, removendo as versões concorrentes e todas as linhas de marcadores: <<<<<<< HEAD, ======= e >>>>>>> atualizar-aviso. Preserve o título e o local, que estão fora do bloco, e salve o arquivo.

Agora escreva o resultado

Pedido para oficina.txt

A oficina deve começar às 16h, e os participantes precisam trazer lápis e papel. Mantenha o título e o local sem alterações.

Arquivo com conflito

text
Oficina de desenho
<<<<<<< HEAD
A oficina começa às 15h. Traga lápis.
=======
A oficina começa às 16h. Traga papel.
>>>>>>> atualizar-oficina
Local: sala 2.

Sua versão final

Escreva o conteúdo completo de oficina.txt como ele deve ser salvo: sem marcadores e atendendo ao pedido.

Escreva pelo menos 20 caracteres (0/20).

Passo 4 de 7

Conferir se a resolução está correta

Revise o arquivo inteiro para encontrar marcadores restantes, informações perdidas e conteúdo que não corresponde ao resultado esperado.

Sem marcadores não significa correto

Duas conferências diferentes

Depois de editar, confira:

  • Os sinais do conflito: todos os blocos foram tratados e seus marcadores removidos?
  • O conteúdo: o arquivo inteiro corresponde ao resultado esperado?

Um arquivo pode estar sem nenhum marcador e ainda trazer uma informação errada ou incompleta.

Dica

Busque no arquivo inteiro

Use a busca do editor para procurar <<<<<<<, ======= e >>>>>>>. Não pare no primeiro trecho corrigido: o mesmo arquivo pode ter vários blocos de conflito. A busca ajuda a encontrar marcadores restantes, mas não substitui a leitura do conteúdo.

Conferir um trecho basta?

Avalie a conclusão

O arquivo tinha dois blocos de conflito. Você conferiu apenas o primeiro, que está correto e sem marcadores. Isso é suficiente para considerar o arquivo inteiro revisado.

O que procurar na leitura

Compare com o resultado solicitado

Leia o arquivo do início ao fim procurando:

  • Perdas: alguma informação que deveria permanecer foi apagada, inclusive fora dos blocos?
  • Duplicações: uma linha ficou repetida sem necessidade ao combinar as versões?
  • Contradições: há informações incompatíveis entre si ou diferentes do que foi solicitado?

Dica

Encontrou um problema?

Ajuste o conteúdo, salve o arquivo e repita a conferência. O objetivo não é apenas fazer os marcadores desaparecerem: é deixar o texto coerente com a intenção da mudança.

Revise uma resolução sem marcadores

Resultado esperado

Neste exemplo fictício, o aviso deve informar atendimento de segunda a sexta, das 9h às 18h, e fechamento aos sábados. O título “Atendimento” e a linha “Canal: formulário do site”, que não estavam em conflito, devem permanecer.

Veja o arquivo completo após uma tentativa de resolução:

aviso.txt — conteúdo a conferir

plaintext
Atendimento
Segunda a sexta: 9h às 18h.
Sábado: 9h às 12h.
Sábado: fechado.

O que ainda precisa ser corrigido?

O arquivo não contém marcadores. Ele atende ao pedido? Indique os problemas e os ajustes necessários antes de prosseguir.

Passo 5 de 7

Sinalizar e revisar a resolução

Prepare o arquivo corrigido, confirme que não restam caminhos não mesclados e revise as alterações antes de concluir a integração.

Sinalize a resolução ao Git

Salvar não basta

O arquivo já foi corrigido, conferido e salvo, mas o Git ainda pode listá-lo como não mesclado. Use git add para sinalizar que você resolveu o conflito.

Nos exemplos, aviso.txt representa o arquivo corrigido. Use o caminho real do seu arquivo.

Prepare e consulte o estado

bash
git add aviso.txt
git status

O estado esperado

Confirme no git status que não restam caminhos não mesclados. Quando todos os conflitos foram sinalizados como resolvidos, o Git informa que o merge ainda está em andamento. Resolver os conflitos não conclui a integração.

Atenção

Preparar não é validar

O git add aceita a resolução que você indica. Ele não verifica se o conteúdo está correto nem remove marcadores esquecidos.

O que esse estado significa?

Sem caminhos não mesclados

Depois de git add aviso.txt, o git status indica que todos os conflitos foram corrigidos, mas o merge continua em andamento. Qual interpretação está correta?

Revise o que está preparado

Olhe além do trecho conflitante

Use git diff --staged para conferir as alterações preparadas para o commit de merge. Revise também as mudanças integradas automaticamente pelo Git, não apenas o arquivo que teve conflito.

Confira se o conjunto das alterações corresponde ao resultado esperado.

Confira todas as diferenças preparadas

bash
git diff --staged

Dica

Encontrou algo para corrigir?

Edite e salve o arquivo. Depois, execute novamente git add com o caminho dele e repita a conferência com git status e git diff --staged.

Uma edição feita após o primeiro git add não atualiza automaticamente a versão preparada.

Ajuste descoberto na revisão

Da correção à nova conferência

Você já executou git add aviso.txt. Na revisão das diferenças preparadas, percebeu que o encontro está marcado para 9h, mas o resultado combinado era 10h. Ordene as ações para deixar a correção preparada e revisada.

  1. Corrigir o horário para 10h em aviso.txt e salvar o arquivo.
  2. Executar git add aviso.txt novamente.
  3. Conferir o estado com git status e revisar as alterações com git diff --staged.

Passo 6 de 7

Concluir o merge e verificar o registro

Finalize a integração revisada e confirme a conclusão pelo estado do repositório, pelo histórico e pelo conteúdo do arquivo.

Registrar a integração

Todos os conflitos foram resolvidos e as alterações preparadas já foram conferidas. Agora, conclua o merge que ainda está em andamento:

Concluir com uma mensagem de commit

bash
git commit -m "Integrar alterações com resolução do conflito no texto"

Nesse contexto, o comando cria o commit de merge e encerra a integração em andamento. Ele registra a resolução manual junto às demais alterações do merge, inclusive as combinadas automaticamente pelo Git.

Qual ação encerra o merge?

O arquivo foi resolvido, salvo e preparado. A revisão das diferenças está correta, mas o Git ainda informa que o merge está em andamento. Qual ação conclui essa integração?

Conferir estado, histórico e arquivo

Depois que o commit for criado, consulte o estado do repositório e o histórico:

Verificar a conclusão

bash
git status
git log --oneline --graph --all --decorate

O que procurar

  • Estado: no cenário de prática, o git status deve indicar uma área de trabalho limpa, sem alterações pendentes nem aviso de merge em andamento.
  • Histórico: localize o novo commit de merge, com a mensagem escolhida, unindo as duas linhas de histórico. A branch atual e HEAD devem apontar para ele.

Dica

Confirme também o conteúdo

Reabra o arquivo resolvido e confirme que ele contém o resultado esperado, sem marcadores de conflito. O estado limpo e o commit no histórico comprovam o registro, mas não garantem, sozinhos, que o texto está correto.

As evidências são suficientes?

Após o commit, você observa:

  • O git status indica uma área de trabalho limpa, sem merge em andamento.
  • O histórico mostra o novo commit de merge na branch atual.
  • O arquivo está sem marcadores, mas informa atendimento até 17h, quando o resultado solicitado era até 18h.

Afirmação: o merge foi concluído com o conteúdo correto.

Passo 7 de 7

Prática final: resolver do início ao fim

Resolva um novo conflito em um ambiente local isolado e reúna evidências de que o conteúdo está correto e o merge foi concluído.

Prepare o ambiente isolado

Um repositório só para este desafio

No Windows, abra o Git Bash; no macOS ou Linux, use um terminal com Bash. Cole o bloco inteiro abaixo.

Ele cria uma pasta temporária nova, configura uma identidade fictícia apenas nesse repositório e prepara o conflito. Não altera seus projetos existentes. É uma preparação auxiliar, não um roteiro de resolução — você não precisa memorizar o bloco.

A mensagem de conflito no final é esperada. Depois, execute o comando cd que o bloco exibir para entrar na pasta do desafio. Se ocorrer outro erro, não prossiga com a prática.

Preparação automática

bash
(
  set -e
  pasta=$(mktemp -d "${TMPDIR:-/tmp}/pratica-merge.XXXXXX")
  cd "$pasta"
  git init -b main
  git config user.name "Pessoa em treinamento"
  git config user.email "treino@example.invalid"
  git config commit.gpgsign false
  git config merge.conflictStyle merge

  printf '%s\n' 'Encontro da equipe' 'Horário e local: 14h, sala Azul.' 'Levar: caderno.' > encontro.txt
  git add encontro.txt
  git commit -m "Registrar encontro inicial"

  git switch -c ajustar-local
  printf '%s\n' 'Encontro da equipe' 'Horário e local: 14h, sala Verde.' 'Levar: caderno.' > encontro.txt
  git add encontro.txt
  git commit -m "Transferir encontro para a sala Verde"

  git switch main
  printf '%s\n' 'Encontro da equipe' 'Horário e local: 15h, sala Azul.' 'Levar: caderno.' > encontro.txt
  git add encontro.txt
  git commit -m "Alterar horário do encontro para 15h"

  git merge --no-ff --no-edit ajustar-local || [ "$?" -eq 1 ]
  printf '\nEntre na pasta do desafio com este comando:\n'
  printf 'cd "%s"\n' "$PWD"
)

Conheça o desafio

O ponto de partida

Na pasta criada, a branch atual é main. A integração de ajustar-local já foi iniciada e parou em um conflito no arquivo encontro.txt.

As alterações das duas branches estavam commitadas e não havia alterações pendentes antes do merge. Continue esse merge; não inicie outro.

O acordo da equipe

O encontro deve acontecer às 15h, na sala Verde. Mantenha o título do arquivo e a orientação de levar um caderno.

Seu objetivo é concluir a integração com esse conteúdo, sem marcadores de conflito nem alterações pendentes, e identificar o commit de merge que a registrou.

Guarde as saídas do terminal durante a execução: sua entrega deve mostrar o que aconteceu de verdade, não apenas listar os comandos que você usaria.

Resolva e apresente as evidências

Sua resolução completa

Execute o desafio no repositório preparado. Depois, apresente:

  • O caminho em conflito e a branch correspondente a cada versão do bloco.
  • O conteúdo completo do arquivo final.
  • A sequência real de comandos e edições, explicando o que você conferiu.
  • As saídas reais que mostram o conflito inicial, as diferenças preparadas antes do commit, o estado final e o histórico em grafo.
  • O identificador do commit de merge e uma explicação de como suas evidências mostram que a integração terminou corretamente.

Não basta apagar os marcadores ou dizer que o comando funcionou.

Escreva pelo menos 150 caracteres (0/150).

Revise sua entrega

Resumo

Critérios de sucesso

Compare sua execução com estes critérios antes de encerrar.

  • Conteúdo: encontro às 15h na sala Verde, título e orientação preservados, nenhum marcador restante.
  • Revisão: arquivo completo e diferenças preparadas conferidos antes do commit.
  • Estado final: nenhum caminho não mesclado, nenhuma alteração pendente e nenhum merge em andamento.
  • Histórico: commit de merge identificado, registrando a integração com o conteúdo correto.

Resolver conflitos simples de merge

Parabéns! Você concluiu: Resolver conflitos simples de merge

Considere o desafio concluído quando suas evidências atenderem a todos os critérios da revisão.

Baixe o Aplicativo agora para ter acesso a + de 5000 cursos gratuitos, exercícios, certificado e muito conteúdo sem pagar nada!

  • Cursos online 100% gratuitos do início ao fim

    Milhares de cursos online em vídeo, ebooks e áudiobooks.

  • Mais de 60 mil exercícios gratuitos

    Para testar seus conhecimentos no decorrer dos cursos online

  • Certificado Digital gratuito válido em todo o Brasil

    Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail

Aplicativo Cursa na tela de ebook, na tela de curso em vídeo e na tela de exercícios do curso, mais o certificado de conclusão de curso