Como abortar um merge no git? Desfazer conflito
Neste artigo você vai aprender a como abortar um merge no git, ou seja, desfazer um conflito de merge que está acontecendo no repositório
Pra abortar um merge no git, rode dentro do repositório:
git merge –abort
Esse comando aborta o processo de resolução de conflito em curso e tenta reconstruir o estado que existia antes do merge
Se o merge JÁ foi commitado, o –abort não serve mais: aí o caminho é git reset –hard ORIG_HEAD (que descarta suas alterações locais) ou, se o merge já foi publicado no remoto, git revert -m 1 <hash-do-merge>
E se o conflito veio de um rebase e não de um merge, o comando certo é git rebase –abort

Fala programador(a), beleza? Bora aprender mais sobre conflitos, merge e também versionamento com git!
É muito comum quando realizamos ações como git pull ou git merge, acontecer algum conflito
E dependendo da quantidade de código que alteramos ou que recebemos, pode ser um grande desastre xD
Ou mesmo ser um erro nosso realizar merge naquele ponto, isso costuma gerar muita dor de cabeça e também costuma ser inviável ver arquivo por arquivo e solucionar os conflitos
Como então podemos desfazer este merge com conflito? Para voltar ao ponto anterior ao problema
É simples! Basta utilizar o comando:
git merge --abort
Isso vai reconstruir o estado anterior ao merge
Quer aprender mais sobre git? Veja este curso gratuito:
Um outro comando que você pode utilizar, e que faz a mesma coisa, é o:
git reset --merge
O merge –abort é basicamente um alias para este, ou seja, um comando mais novo e com um nome mais objetivo
Então tanto faz a sua escolha, os dois resolvem o nosso problema 🙂
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 114 aulas
- 4 projetos
- 9h 18min
Conclusão
Neste artigo você aprendeu a como abortar um merge no git, ou seja, desfazer um merge conflict
O que é uma ação normal quando realizamos um git merge de outro branch, por exemplo
Utilizamos o comando: git merge –abort ou o git reset –merge
Os dois realizam a mesma função
Confira nossos cursos gratuitos no Youtube, com vídeos todos os dias!
Se inscreva e ative o sininho para receber as notificações e aprender mais ainda sobre desenvolvimento web!
Veja também nosso catálogo de cursos na Udemy, todos com exercícios e projetos práticos, nas mais diversas tecnologias
O link acima contém um cupom de desconto para os cursos!
Antes de rodar o merge, commita ou dá stash:
A própria documentação do git avisa: se existiam alterações não commitadas na sua worktree quando o merge começou (ainda mais se você mexeu nelas DEPOIS do merge iniciar), o git merge –abort pode em alguns casos não conseguir reconstruir essas mudanças
Ou seja, o –abort é ótimo pra desfazer o conflito, mas ele não é rede de segurança pra código solto
Por isso a recomendação oficial é commitar ou dar git stash antes de rodar o git merge
Tome cuidado com isso, é o tipo de coisa que a gente só aprende depois de perder trabalho de uma tarde inteira
E se aparecer ‘fatal: There is no merge to abort (MERGE_HEAD missing)’?
Esse erro significa uma coisa só: não existe merge em andamento pra abortar
O git marca o merge em curso com o MERGE_HEAD, e sem ele o –abort não tem o que desfazer
Na prática isso acontece em dois cenários bem comuns:
1) o merge já foi commitado (o conflito foi resolvido e o commit de merge entrou)
2) o conflito não veio de um merge, e sim de um rebase
Nos dois casos o caminho é outro, e é o que a gente vê logo abaixo
Como desfazer um merge que JÁ foi commitado:
Aqui o –abort não serve mais, o merge deixou de estar ‘em andamento’
Toda operação de merge ou pull guarda a ponta anterior do branch no ORIG_HEAD
Então dá pra voltar resetando pra ele:
git reset –hard ORIG_HEAD
Esse aqui descarta suas alterações locais, ele traz índice e árvore de trabalho de volta àquele estado e move a ponta do branch pro commit anterior
Se você quer preservar alterações locais que NÃO entraram no merge, a própria doc do git reset traz este exemplo:
git reset –merge ORIG_HEAD
E se o merge já foi pro remoto, publicado, visto por todo mundo?
Aí não dá pra reescrever histórico na cara dura
O caminho é o git revert com a opção -m (–mainline), informando qual pai deve ser mantido como linha principal:
git revert -m 1 <hash-do-merge>
Isso cria um NOVO commit que reverte as mudanças, em vez de reescrever o que já está publicado 🙂
E se o conflito veio de um rebase?
Muita gente roda git pull, toma conflito, tenta o merge –abort e leva o erro do MERGE_HEAD
Motivo: existe a configuração pull.rebase, que faz o git pull rebasear por padrão em vez de mesclar
Se o seu ambiente está assim, o que está acontecendo é um rebase, não um merge
O comando pra voltar ao estado anterior é:
git rebase –abort
Ele restaura o branch como estava antes do rebase começar
E as outras duas saídas do rebase, pra você guardar:
git rebase –continue (segue depois de resolver)
git rebase –skip (pula o commit problemático)
git merge –quit: o primo esquecido do –abort
Existe uma terceira saída que quase ninguém cita
O git merge –quit esquece o merge em andamento e deixa o índice e a árvore de trabalho exatamente como estão
Sacou a diferença? O –abort tenta RECONSTRUIR o estado anterior, o –quit só limpa a marcação do merge e te deixa com a bagunça do jeito que ela está
Útil quando você quer manter parte do que já foi mesclado no disco e resolver na mão
Essa opção entrou no Git 2.23, então em qualquer instalação atual (a série recente é a 2.55) ela está lá
Qual comando usar em cada situação:
Merge em andamento, com conflito aberto e você quer voltar atrás: git merge –abort
Merge em andamento e você quer só largar o merge, mantendo índice e árvore como estão: git merge –quit
Merge já commitado, e você aceita descartar alterações locais: git reset –hard ORIG_HEAD
Merge já commitado, mas você quer preservar alterações locais que não entraram nele: git reset –merge ORIG_HEAD
Merge já commitado E publicado no remoto: git revert -m 1 <hash-do-merge>
O conflito é de rebase, não de merge: git rebase –abort
Não há material próprio pertinente disponível: o vídeo fornecido é sobre uma skill do GitHub que faz pesquisa na internet, não tem nenhuma relação com merge, conflito ou rebase no git. Nenhuma frase de experiência foi escrita no texto proposto.
Pra conquistar o espaço de primeira mão nessa SERP (que é o que Stack Overflow, freeCodeCamp e dev.to NÃO entregam), o que precisaria ser gravado/capturado de verdade: (1) terminal real provocando um conflito de merge num repo de teste e rodando git merge –abort, com o antes e depois do git status; (2) o caso do MERGE_AUTOSTASH, mostrando lado a lado o que acontece na worktree com –abort versus com git reset –merge; (3) o cenário do aviso oficial, com alterações não commitadas na worktree antes do merge, pra registrar em que situação o –abort realmente não reconstrói o trabalho; (4) o erro fatal: There is no merge to abort (MERGE_HEAD missing) sendo reproduzido depois de um pull com pull.rebase ligado. Com esses quatro prints/gravações dá pra escrever o bloco de experiência real e o veredito de qual comando usar em cada caso.
Perguntas frequentes
Como abortar um merge no git?
Rodando git merge –abort no repositório
A opção –abort aborta o processo de resolução de conflito em curso e tenta reconstruir o estado anterior ao merge
Ela só funciona com um merge em andamento, ou seja, enquanto o MERGE_HEAD existe
Qual a diferença entre git merge –abort e git reset –merge?
Com o MERGE_HEAD presente, os dois são equivalentes
A exceção está documentada: se também existir um MERGE_AUTOSTASH, o git merge –abort aplica a entrada do stash de volta na sua worktree, enquanto o git reset –merge deixa essas mudanças guardadas na lista de stash
Ou seja, na maioria dos casos dá no mesmo, mas nesse cenário específico o resultado na sua árvore de trabalho é diferente
O que significa o erro ‘fatal: There is no merge to abort (MERGE_HEAD missing)’?
Significa que não existe merge em andamento pra abortar, porque o MERGE_HEAD está ausente
Geralmente é porque o merge já foi commitado, ou porque o conflito na verdade veio de um rebase
No primeiro caso use git reset –hard ORIG_HEAD ou git reset –merge ORIG_HEAD, no segundo use git rebase –abort
O git merge –abort recupera minhas alterações não commitadas?
Nem sempre, e a documentação oficial avisa isso
Se havia alterações não commitadas na worktree quando o merge começou, ainda mais se elas foram modificadas depois do merge iniciar, o git merge –abort pode em alguns casos não conseguir reconstruir essas alterações
Por isso a recomendação é commitar ou dar stash ANTES de rodar o git merge
Como desfazer um merge que já foi commitado?
Operações como pull e merge sempre deixam a ponta original do branch em ORIG_HEAD
Então git reset –hard ORIG_HEAD volta índice e árvore de trabalho àquele estado e move a ponta do branch pra lá, descartando alterações locais
Se você quer preservar alterações locais que não entraram no merge, a doc do git reset traz o exemplo git reset –merge ORIG_HEAD
Como desfazer um merge que já foi enviado pro remoto?
Nesse caso a saída é o git revert com a opção -m (–mainline), informando o número do pai que deve ser mantido como linha principal:
git revert -m 1 <hash-do-merge>
Isso cria um novo commit que reverte as mudanças, em vez de reescrever o histórico que já está publicado
O que faz o git merge –quit?
O –quit esquece o merge em andamento e deixa o índice e a árvore de trabalho como estão
Se existir um MERGE_AUTOSTASH, a entrada é salva na lista de stash
É diferente do –abort, que tenta reconstruir o estado anterior ao merge
Essa opção foi adicionada no Git 2.23
E se o conflito aconteceu durante um rebase?
Aí o comando é git rebase –abort, que restaura o branch como estava antes do rebase
As outras saídas são git rebase –continue e git rebase –skip
Vale lembrar que existe a configuração pull.rebase, que faz o git pull rebasear por padrão em vez de mesclar: por isso às vezes você toma conflito de rebase achando que era merge
Leia também
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares
Como saber em qual branch estou no Git? (2 comandos simples)
Neste artigo você vai aprender a como verificar o branch atual em git, ou seja, o branch em que você está trabalhando no momento Fala […]
Como remover remote origin de repositório em git
Neste artigo você vai aprender a como remover remote origin de repositório em git, com apenas um comando! Fala programador(a), beleza? Bora aprender mais sobre […]
O que é GIT e GitHub? Para que serve, diferenças e cursos
Seja bem-vindo ao nosso guia completo sobre uma das ferramentas mais cruciais e universalmente utilizadas no mundo da tecnologia da informação: o Git e Github. […]

olá, fui alterar o nome de um commit, depois avancei no projeto e não consigo fazer ou desfazer o merge, nem consigo subir o próximo commit /-: $ git status On branch main Your branch and ‘origin/main’ have diverged, and have 2 and 1 different commits each, respectively. (use “git pull” to merge the remote branch into yours) No commands done. Next command to do (1 remaining command): pick 2de06a9 findall categoria padrao DTO (use “git rebase –edit-todo” to view and edit) You are currently editing a commit while rebasing branch ‘main’ on ‘0f86293’. (use “git commit –amend” to amend… Read more »