Como desfazer o último commit no Git?
Cometer um erro no Git é comum, mas felizmente há maneiras seguras de desfazer o último commit sem perder as alterações feitas no código. Existem três principais abordagens para desfazer um commit: reset soft, reset hard e revert.
1. Desfazendo o commit sem perder as alterações (reset --soft
)
Se deseja apenas remover o commit, mas manter os arquivos no stage (prontos para um novo commit), utilize:
git reset --soft HEAD~1
Isso faz com que o último commit desapareça do histórico, mas os arquivos continuam prontos para serem commitados novamente.
2. Desfazendo o commit e removendo arquivos do stage (reset --mixed
)
Se além de remover o commit, você quiser tirar os arquivos do stage para editá-los novamente antes de um novo commit, use:
git reset --mixed HEAD~1
Isso deixa os arquivos modificados, mas não adicionados ao stage.
3. Desfazendo o commit e removendo completamente as alterações (reset --hard
)
Caso queira descartar completamente as mudanças do último commit, utilize:
git reset --hard HEAD~1
⚠️ Atenção: Esse comando remove as alterações do commit e do working directory, tornando-as irrecuperáveis, a menos que tenham sido armazenadas em outro lugar.
4. Criando um commit que desfaz o último commit (git revert
)
Se o commit já foi enviado para um repositório remoto e deseja desfazê-lo sem perder o histórico, use:
git revert HEAD
Isso cria um novo commit que desfaz as mudanças do commit anterior, preservando o histórico de commits no repositório.
Quando usar reset ou revert para desfazer um commit?
Entender como desfazer um commit corretamente é essencial para qualquer desenvolvedor que usa Git. Dependendo do cenário, podemos simplesmente remover o commit e manter os arquivos (reset --soft), voltar ao estado anterior sem perder o código (reset --mixed) ou até mesmo apagar tudo (reset --hard).
A escolha da abordagem correta evita perda de trabalho e garante um histórico limpo e bem estruturado. Se um commit já foi enviado para o repositório remoto, o uso do git revert
é o mais recomendado, pois mantém a rastreabilidade do código sem comprometer o histórico. Por isso, conhecer bem essas opções pode ajudar a evitar problemas e recuperar alterações feitas por engano.
Algumas aplicações:
- Corrigir erros em commits antes de enviá-los para o repositório remoto
- Remover commits indesejados sem perder alterações no código
- Manter um histórico limpo e bem organizado
- Reverter alterações em código compartilhado sem afetar o trabalho de outros desenvolvedores
- Evitar perda de código por erro ao commitar mudanças incorretas
Dicas para quem está começando
- Antes de usar 'git reset --hard', tenha certeza de que não perderá alterações importantes.
- Use 'git log --oneline' para visualizar os commits antes de desfazer algo.
- Se já enviou um commit para o repositório remoto, prefira 'git revert' em vez de 'git reset'.
- Se quiser apenas modificar a mensagem do último commit, use 'git commit --amend'.
- Crie um backup do código antes de executar comandos destrutivos como 'git reset --hard'.
Contribuições de Ricardo Moura