Menu
Coddy logo textTech

Git: Desfazer um commit

Última atualização

Como desfazer um commit depende de qual commit é e de ele já ter sido enviado ou não. Um commit antigo enterrado no seu histórico - ou qualquer coisa já compartilhada - pede git revert, que adiciona um novo commit revertendo-o sem reescrever nada. Uma sequência de commits locais recentes pode simplesmente ser desfeita com git reset. Se tudo o que você precisa é desfazer o commit mais recente, a página git desfazer último commit cobre todas as variantes dessa correção rápida.

Experimente estes comandos no terminal playground: um shell real no seu navegador, sem nada para instalar.

Qual comando usar

SituationCommand
Desfazer um commit antigo, mantendo tudo o que veio depoisgit revert <hash>
Desfazer um commit que você já enviougit revert <hash>
Desfazer os últimos 3 commits locais, mantendo o trabalhogit reset --soft HEAD~3
Desfazer os últimos 3 commits locais, descartando o trabalhogit reset --hard HEAD~3
Desfazer um intervalo com novos commits de reversãogit revert HEAD~3..HEAD

reset vs revert

Behaviorgit resetgit revert
Reescreve o históricoSimNão
Seguro em commits enviadosNãoSim
Cria um novo commitNãoSim
Funciona em commits antigos no meio do históricoNãoSim
Pode descartar alteraçõesSim (--hard)Não

Exemplo prático

Desfaça um commit antigo específico - mesmo um que já foi enviado - sem tocar nos commits que vieram depois dele.

StepCommandResult
1git log --onelineEncontre o hash do commit ruim (ex.: a1b2c3d)
2git revert a1b2c3dUm novo commit o reverte; os commits posteriores ficam intactos
3git pushCompartilhe a correção - nenhum histórico foi reescrito

Perguntas frequentes sobre desfazer commit no Git

Como desfaço um commit antigo sem perder os commits que vieram depois?
Use git revert <hash>. O revert cria um novo commit que reverte apenas o commit que você indicar - todos os commits posteriores permanecem exatamente como estavam. Encontre o hash antes com git log --oneline. Se o revert conflitar com alterações posteriores, o Git pausa para você resolver e executar git revert --continue.
Como desfaço vários commits de uma vez?
Para commits apenas locais, git reset --soft HEAD~3 remove os três últimos mantendo as alterações deles no stage (use --hard para descartá-las). Para commits já enviados, reverta o intervalo: git revert --no-commit HEAD~3..HEAD reverte os três, e então um único git commit registra a operação de desfazer.
Como desfaço um commit que já enviei?
Use git revert <hash> em vez de reset. O revert cria um novo commit que desfaz as alterações do commit alvo, deixando o histórico intacto. Essa é a forma segura de desfazer commits compartilhados: reescrever o histórico enviado com reset força todos os outros a reconciliar suas cópias.
Quando devo usar reset e quando devo usar revert?
Use reset quando os commits são só seus e ainda locais: ele simplesmente move a branch para trás, como se eles nunca tivessem existido. Use revert quando o commit foi enviado, é compartilhado ou está no meio do histórico: ele desfaz as alterações com um novo commit que é seguro para todos puxarem.
Posso praticar isso online?
Sim. Abra o terminal playground para executar estes comandos em um shell real no seu navegador, sem nada para instalar. O curso interativo e gratuito de Git da Coddy também aborda como desfazer alterações passo a passo.
Coddy programming languages illustration

Aprenda Git com a Coddy

COMEÇAR