
Passo 1 de 7
Identificar o que precisa ser desfeito
Reconheça o estado do merge e decida entre continuar, interromper ou reverter a integração.
Trilha de aprendizado · Nível 2 · Tutorial 4
Interromper um merge em andamento com git merge --abort, voltando ao estado anterior, e desfazer um merge já concluído com git revert, sem apagar o histórico.
Identificar o que precisa ser desfeito
Reconheça o estado do merge e decida entre continuar, interromper ou reverter a integração. 2 min
Interromper um merge e conferir o retorno
Crie um conflito controlado, interrompa o merge e compare arquivos, branch e último commit com o estado anterior. 4 min
Encontrar o merge e confirmar seus pais
Conclua a integração do ensaio e confira qual commit representa o estado anterior da branch de destino. 3 min
Reverter o merge sem apagar o histórico
Crie um commit de reversão usando o primeiro pai do merge como referência, preservando o histórico existente. 3 min
Validar o resultado e evitar perda de trabalho
Confira arquivos, branch e histórico após a reversão e reconheça o risco de usar reset --hard como atalho. 2 min
Entender o que acontece com a branch integrada
Preveja o efeito de uma nova tentativa de merge após interromper ou reverter a integração. 2 min
Aplicar um roteiro seguro para desfazer merges
Escolha o procedimento adequado para dois estados de merge e justifique como verificar o resultado sem apagar o histórico. 3 min

Passo 1 de 7
Reconheça o estado do merge e decida entre continuar, interromper ou reverter a integração.
Antes de desfazer, consulte git status. Como você já viu, ele indica conflitos pendentes. Mas atenção: resolver os arquivos e prepará-los não conclui o merge; ainda falta registrar o commit.
Exemplo
Dependendo do idioma do Git, você pode encontrar:
You have unmerged paths. — Há caminhos não mesclados: existem conflitos pendentes.All conflicts fixed but you are still merging. — Todos os conflitos foram resolvidos, mas o merge continua em andamento.Nos dois casos, a integração ainda não foi concluída.
Dica
Um git status limpo não comprova que houve um merge. Para identificar uma integração já registrada, também será preciso consultar o histórico.
git merge --abort interrompe a operação pendente.git revert cria um novo commit para desfazer mudanças, sem apagar o histórico.O abort não desfaz um merge já concluído.

Interromper cancela uma operação pendente; reverter acrescenta um registro ao histórico.
Atenção
Não execute os comandos para desfazer ainda. A prática será no seu computador, em uma pasta nova com um repositório local de aprendizado, sem trabalho importante e sem publicação no GitHub.
Associe cada situação à decisão apropriada.
Toque em um item e depois no par correspondente.

Passo 2 de 7
Crie um conflito controlado, interrompa o merge e compare arquivos, branch e último commit com o estado anterior.
Faça este ensaio no seu computador, sem publicar no GitHub e sem usar trabalho importante. No terminal, entre em uma pasta onde você guarda seus projetos, fora de qualquer repositório existente.
Os comandos abaixo funcionam no Git Bash do Windows e em terminais Bash ou Zsh do macOS/Linux. Eles criam um repositório com as branches destino e proposta, que alteram a mesma linha de mensagem.txt. Se a pasta ensaio-merge-seguro já existir, escolha outro nome para os dois primeiros comandos.
Se algum comando falhar, pare antes de continuar.
mkdir ensaio-merge-seguro
cd ensaio-merge-seguro
git init -b destino
printf 'Mensagem: inicial\n' > mensagem.txt
git add mensagem.txt
git commit -m "Cria mensagem inicial"
git switch -c proposta
printf 'Mensagem: proposta\n' > mensagem.txt
git add mensagem.txt
git commit -m "Altera mensagem na proposta"
git switch destino
printf 'Mensagem: destino\n' > mensagem.txt
git add mensagem.txt
git commit -m "Altera mensagem no destino"Antes de integrar, execute os comandos abaixo. Anote a branch atual, o identificador do último commit e o conteúdo do arquivo.
Você deve estar em destino, com o último commit “Altera mensagem no destino” e o arquivo contendo Mensagem: destino. O git status deve indicar estado limpo, sem alterações pendentes.
git status
git branch --show-current
git log -1 --oneline
cat mensagem.txt
As duas branches alteraram a mesma linha. Guarde como referência a ponta de destino e o conteúdo dela.
Atenção
Começar com o estado limpo é a condição de segurança deste ensaio, não uma exigência universal de git merge --abort. Se já existiam alterações locais antes do merge, o Git pode não conseguir reconstruir completamente o estado original. Se a conferência não bater, pare antes de iniciar a integração.
Execute este bloco. O conflito em mensagem.txt é esperado: o merge ficará em andamento, sem um commit de conclusão. Confira os caminhos não mesclados no git status.
git merge proposta
git statusCom o conflito confirmado, execute o próximo bloco, sem resolver nem registrar o merge. Atenção: git merge --abort também abandona as edições feitas para tentar resolver esse merge.
Depois, compare com suas anotações: o estado deve estar limpo e sem merge pendente; a branch deve continuar sendo destino; o identificador do último commit deve ser o mesmo; e o arquivo deve voltar a conter Mensagem: destino, sem marcadores de conflito.
O abort não cria um commit de reversão nem altera os commits existentes: ele cancela a integração ainda não concluída.
Se o abort falhar ou o resultado for diferente do esperado, pare e leia o estado informado pelo Git antes de continuar.
git merge --abort
git status
git branch --show-current
git log -1 --oneline
cat mensagem.txtCompare suas anotações com o resultado após git merge --abort. Qual era a branch, qual era o identificador do último commit e qual era o conteúdo do arquivo? O que o git status mostrou depois? Explique como essas observações confirmam que a integração foi cancelada sem criar um novo commit.
Escreva pelo menos 60 caracteres (0/60).

Passo 3 de 7
Conclua a integração do ensaio e confira qual commit representa o estado anterior da branch de destino.
Continue no repositório local do ensaio anterior. Confira que você está na mesma branch de destino e que o estado está limpo, sem merge pendente. Só então repita a integração.
Nos comandos abaixo, substitua RAMO_INTEGRADO pelo nome da branch que você tentou integrar e ARQUIVO pelo nome do arquivo de texto do ensaio. Não use um projeto com trabalho importante.
Execute uma linha por vez. Se as conferências não corresponderem ao esperado, pare antes do merge.
git status
git branch
git merge RAMO_INTEGRADOO mesmo conflito deve reaparecer. No seu editor, substitua todo o conteúdo do arquivo em conflito pela linha abaixo, sem marcadores, e salve.
Mensagem: integração concluída.
Confira se a diferença preparada contém exatamente a resolução definida.
git add -- ARQUIVO
git diff --stagedSe a revisão estiver correta, conclua. A opção --no-edit aceita a mensagem padrão sem abrir um editor. O status final deve estar limpo.
git commit --no-edit
git statusExiba o histórico. Neste ensaio, o commit apontado por HEAD é o merge que você acabou de concluir. Anote seu identificador.
Localize também o último commit da branch de destino antes da integração: ele deve corresponder à referência que você registrou antes de iniciar o merge.
git log --oneline --graph --all --decorate
Os dois commits ligados ao merge são seus pais. Para confirmar a ordem deles, consulte os metadados, não apenas o desenho.
Use git show --no-patch --pretty=raw com o identificador do merge. Como ele ainda é o último commit neste ensaio, você pode usar HEAD, como abaixo.
Leia as duas linhas parent na ordem em que aparecem:
Compare os identificadores com o grafo e com sua referência anterior. O pai 1 não depende de a branch se chamar main: depende de onde o merge foi executado.
Anote o identificador do merge e os dois pais, na ordem exibida. Guarde essas referências para a próxima etapa.
git show --no-patch --pretty=raw HEADAtenção
A posição das linhas no grafo não confirma qual é o pai 1; as linhas parent confirmam. Se a integração foi por fast-forward, ela não criou um commit de merge com dois pais. Não aplique automaticamente git revert -m 1 a esse caso. Se o resultado diferir do ensaio, pare e reavalie.
A integração foi executada na branch entrega. Os identificadores do grafo estão abreviados; abaixo dele aparecem trechos dos metadados do merge.
* c3d4e5f (HEAD -> entrega) Merge branch 'ajuste'
|\
| * b2c3d4e (ajuste) Alterar mensagem na proposta
* | a1b2c3d Alterar mensagem no destino
|/
* 0123456 Versão inicial
commit c3d4e5f678901234567890123456789012345678
parent a1b2c3d456789012345678901234567890123456
parent b2c3d4e567890123456789012345678901234567Qual alternativa identifica o merge e o pai que representa o estado anterior da branch de destino?

Passo 4 de 7
Crie um commit de reversão usando o primeiro pai do merge como referência, preservando o histórico existente.
Com o merge concluído, use git revert -m 1 <commit-de-merge> para criar um novo commit que inverte as mudanças introduzidas pelo merge em relação ao primeiro pai.
O -m 1 escolhe o pai 1 como referência principal: no nosso ensaio, o estado da branch de destino antes da integração, que você já identificou. Não significa “desfazer um commit” nem “usar a branch número 1”.
Na prática, acrescentaremos --no-edit para aceitar a mensagem padrão da reversão sem abrir um editor.

R desfaz a diferença entre P1 e M. Ele não remove M nem os commits da outra linha.
Ordene as etapas para reverter o merge do ensaio local.
No terminal, dentro do repositório de aprendizado, execute as conferências abaixo. A branch marcada com * deve ser a que recebeu o merge; o estado deve estar limpo, sem merge pendente; e o último commit deve ser o merge cujos dois pais você confirmou.
Continue apenas nesse cenário, sem commits posteriores ao merge e sem tê-lo compartilhado. Se algo não corresponder, pare e confira antes de executar a reversão.
Compare o identificador exibido pelo log com o merge identificado na etapa anterior.
git status
git branch
git log -1 --onelineAtenção
Não esperamos conflitos neste ensaio, mas um revert pode gerá-los. Se isso acontecer, interrompa a reversão com git revert --abort e pare para reavaliar. Não use git merge --abort: a operação em andamento será uma reversão, não um merge.
Substitua <commit-de-merge>, incluindo os sinais < e >, pelo identificador real confirmado. Só então execute. O terminal deve confirmar um novo commit, normalmente com uma mensagem iniciada por “Revert”.
git revert -m 1 --no-edit <commit-de-merge>Relate o que o terminal mostrou ao executar o revert: houve confirmação de um novo commit? Informe o identificador ou a mensagem exibida e explique por que usamos -m 1. Se você precisou interromper a reversão, relate isso em vez de afirmar que ela foi concluída.
Escreva pelo menos 30 caracteres (0/30).

Passo 5 de 7
Confira arquivos, branch e histórico após a reversão e reconheça o risco de usar reset --hard como atalho.
No repositório local do ensaio, após o revert:
Neste ensaio, sem commits entre o merge e a reversão, o conteúdo versionado volta ao estado do primeiro pai. O histórico, porém, inclui o merge e sua reversão.
git status
git log --oneline --graph --all --decorate
P é o primeiro pai de M. Após R, o conteúdo corresponde a P neste ensaio, mas M continua no histórico.
Relate o resultado das três conferências no seu computador: conteúdo do arquivo, branch e status, e presença do merge e da reversão no histórico. Se algo não corresponder ao esperado, descreva a diferença.
Escreva pelo menos 30 caracteres (0/30).
Atenção
git reset --hard pode descartar alterações locais em arquivos rastreados. Quando aponta para um commit anterior, também move a branch para trás, em vez de acrescentar uma reversão ao histórico.
Não execute esse comando nesta prática. Ele não é equivalente ao revert, mesmo que o conteúdo final de um arquivo possa parecer igual.
O objetivo não é apenas fazer o arquivo parecer como antes: é desfazer as mudanças da integração mantendo o merge e registrando a reversão em um novo commit.
Se o status estiver limpo, usar reset --hard apontando para antes do merge será equivalente a criar um commit de reversão.

Passo 6 de 7
Preveja o efeito de uma nova tentativa de merge após interromper ou reverter a integração.
Nem abortar nem reverter exclui automaticamente a branch integrada.

Acima: após abortar, não há merge registrado. Abaixo: após reverter, o merge permanece e ganha um commit de reversão.
Relacione cada situação ao resultado esperado.
Toque em um item e depois no par correspondente.
O caminho usual é reverter o commit de revert. Isso cria outro commit que desfaz a reversão, sem apagar o histórico.
A forma abaixo é apenas uma referência conceitual; não execute agora. O identificador deve ser o do commit de reversão, não o do merge original.
git revert <commit-de-revert>Dica
Neste cenário, o commit de revert tem apenas um pai, então não se usa -m. Antes de recuperar as mudanças, revise o resultado desejado e as correções necessárias para não trazer de volta o problema original.
Após revisar as mudanças e as correções necessárias, você decide recuperar o conteúdo removido pela reversão do merge. Qual é o caminho usual?

Passo 7 de 7
Escolha o procedimento adequado para dois estados de merge e justifique como verificar o resultado sem apagar o histórico.
git status e confira a branch.
Abortar cancela a integração pendente. Reverter acrescenta um commit que desfaz mudanças.
Atenção
Alterações locais não registradas, commit sem dois pais ou resultado diferente do esperado exigem reavaliar antes de seguir. Não aplique git revert -m 1 automaticamente nem use git reset --hard como atalho.
Exemplo
Em um repositório local de aprendizado, a branch entrega estava limpa, no commit 31bd620. O arquivo aviso.txt continha somente:
Mensagem: versão local
Você executou git merge proposta. Agora, git status indica merge em andamento e conflito em aviso.txt. Não há edições de resolução que você queira guardar. A intenção é cancelar essa integração.
Qual comando você usaria e por quê? Descreva as evidências esperadas no arquivo, na branch e no histórico.
Escreva pelo menos 60 caracteres (0/60).
Exemplo
Considere outro cenário local, ainda não compartilhado:
git status: branch entrega, estado limpo, nenhum merge pendente.7ac91e2, sem commits posteriores.git show --no-patch --pretty=raw 7ac91e2 confirmou, nesta ordem, os pais 31bd620 e 94fe803.31bd620, era a ponta de entrega antes da integração.aviso.txt continha “Mensagem: versão local”; após o merge, contém “Mensagem: versão combinada”.Você quer desfazer as mudanças introduzidas pelo merge, preservando o histórico.
Indique o comando completo, explique o papel de -m 1 e diga por que git merge --abort não serve aqui. Como você confirmaria o resultado? Se realizou o ensaio anterior, relacione sua resposta ao que observou.
Escreva pelo menos 80 caracteres (0/80).
Resumo
Nos dois casos, o procedimento correto mantém os commits já registrados. O que muda é se a integração chegou a ser registrada.
Parabéns! Você concluiu: Desfazer um merge com segurança
Você concluiu este nível!
Agora você vai iniciar: Repositórios no GitHub
Configurar o acesso seguro ao GitHubPreparar uma conta no GitHub, escolher a visibilidade adequada para um projeto e configurar autenticação HTTPS pelo navegador com armazenamento seguro de credenciais.Milhares de cursos online em vídeo, ebooks e áudiobooks.
Para testar seus conhecimentos no decorrer dos cursos online
Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail
Baixe nosso aplicativo pelo QR Code ou pelos links abaixo:.
+ de 10 milhões
de alunos
Certificado grátis e
válido em todo o Brasil
60 mil exercícios
gratuitos
4,8/5 classificação
nas lojas de apps
Cursos gratuitos em
vídeo, ebooks e audiobooks