git revert
Desfaz um commit criando um novo commit
O comando 'git revert' desfaz um commit anterior adicionando um novo commit que aplica a alteração oposta. O histórico não é reescrito — o commit original fica — então é o jeito seguro de desfazer commits já enviados e compartilhados. Pode haver conflito se commits posteriores mexeram nas mesmas linhas; resolva e depois git revert --continue.
Sinopse
git revert [--[no-]edit] [-n] [-m <parent-number>] <commit>...
git revert (--continue | --skip | --abort | --quit)Opções
Escolhendo a opção certa
revert versus reset
Duas formas de desfazer commits
| Comando | Histórico | Seguro após o push? |
|---|---|---|
git revert <commit> | Adiciona um commit que desfaz | Sim |
git reset --hard <commit> | Remove commits do branch | Não — exige um push forçado |
Exemplos
Desfazer o último commit
git revert HEADCria um commit que desfaz HEAD.
Desfazer um commit mais antigo
git revert a1b2c3dDesfaz esse commit e mantém os posteriores.
Desfazer um merge
git revert -m 1 <merge-commit>Desfaz as alterações que um merge trouxe.
Exemplos de fluxos de trabalho
git log --onelineEncontrar o commit
git revert a1b2c3dCriar o commit que desfaz
git pushCompartilhá-lo — sem forçar
Solução de problemas
error: commit is a merge but no -m option was given
Causa: Um merge tem dois pais
Use git revert -m 1 <commit>
CONFLITO durante o revert
Causa: Commits posteriores alteraram as mesmas linhas
Corrija os arquivos, faça git add e depois git revert --continue (ou --abort)
Dicas e armadilhas
Boas práticas
- ✓Use revert em commits compartilhados; reset só em commits locais.
- ✓Explique o porquê na mensagem do revert.
- ✓Reverta primeiro o mais recente ao desfazer vários commits.
Erros comuns
- ✗Usar git reset em commits enviados em vez de git revert, obrigando todos a consertar o histórico.
- ✗Reverter um merge sem -m.
- ✗Fazer merge de novo de um branch revertido e não entender por que as alterações não voltam — reverta o revert antes.
Perguntas frequentes
Não. Ele adiciona um novo commit; o original fica no histórico.
Sim — isso reaplica a alteração original.
git revert --abort.