Skip to content Skip to footer

Como Desfazer o Último Commit no Git: Um Guia Completo

O Git é uma ferramenta indispensável para programadores, permitindo o controlo de versões e a colaboração em projetos de código. No entanto, todos cometemos erros, como realizar um commit com alterações indesejadas ou mensagens incorretas. Felizmente, o Git oferece várias formas de desfazer o último commit, seja para reverter completamente as alterações, seja para ajustá-las. Neste artigo, exploraremos como desfazer o último commit no Git, com exemplos práticos, explicações detalhadas e conselhos para evitar problemas. Este guia é ideal para iniciantes e programadores experientes que desejam dominar o controlo de versões.

Por Que Desfazer um Commit?

  • Alterações acidentais: Incluiu ficheiros ou mudanças que não deveria.
  • Mensagem de commit errada: A descrição do commit está incorreta ou pouco clara.
  • Mudança de planos: O commit já não reflete o estado desejado do projeto.
  • Commits prematuros: Realizou o commit antes de concluir as alterações.

Dependendo do cenário, pode querer manter as alterações no diretório de trabalho, descartá-las ou reescrever o histórico. Vamos abordar as principais opções para desfazer o último commit, com comandos práticos e explicações.

Antes de Começar: Precauções Importantes

Antes de executar qualquer comando para desfazer um commit, tenha em conta:

  1. Verifique o estado do repositório: Use git status para compreender o que está a acontecer no seu repositório.
  2. Faça uma cópia de segurança: Se não tem certeza do impacto, crie uma cópia do diretório ou use git branch backup para guardar o estado atual.
  3. Commits enviados para o remoto: Se o commit foi enviado para um repositório remoto (como o GitHub), reverter pode exigir passos adicionais para evitar conflitos com outros programadores.
  4. Impacto em colaboradores: Alterar o histórico público pode causar problemas em equipas. Comunique com os seus colegas antes de reescrever o histórico.

Agora, vamos aos métodos para desfazer o último commit!

1. Desfazer o Último Commit, Mantendo as Alterações no Diretório de Trabalho

Se deseja desfazer o commit, mas manter as alterações nos ficheiros para as editar ou recommitar, use o comando git reset –soft.

git reset --soft HEAD^

Como Funciona:

  • –soft: Remove o último commit, mas preserva as alterações nos ficheiros no diretório de trabalho e no índice (área de preparação).
  • HEAD^: Refere-se ao commit imediatamente anterior ao HEAD (o último commit).

Exemplo Prático:

  1. Realizou um commit com a mensagem “Adiciona nova funcionalidade”.
  2. Percebe que incluiu um ficheiro errado ou quer ajustar a mensagem.
  3. Execute:
    git reset --soft HEAD^
  4. Verifique o estado com git status. As alterações ainda estão no índice, prontas para um novo commit.
  5. Edite os ficheiros ou o índice, se necessário, e faça um novo commit:
    git commit -m "Damascode Git"

Quando Usar:

  • Quando deseja reescrever a mensagem do commit.
  • Quando precisa adicionar ou remover ficheiros antes de recommitar.

2. Desfazer o Último Commit e Limpar o Índice

Se deseja desfazer o commit e limpar o índice (área de preparação), mas manter as alterações nos ficheiros, use git reset –mixed (ou apenas git reset, já que –mixed é o padrão).

git reset --mixed HEAD^

Como Funciona:

  • –mixed: Remove o último commit e as alterações do índice, mas mantém as mudanças nos ficheiros no diretório de trabalho.
  • As alterações voltam ao estado “não rastreado” ou “modificado”, permitindo que as edite antes de as adicionar novamente ao índice.

Exemplo Prático:

  1. Cometeu alterações, mas percebe que quer reorganizá-las.
  2. Execute:
    git reset --mixed HEAD^
  3. Use git status para ver que os ficheiros estão modificados, mas não no índice.
  4. Edite os ficheiros, adicione ao índice com git add e faça um novo commit:git add . git commit -m "Damascode git - Novo commit organizado"

Quando Usar:

  • Quando deseja reorganizar as alterações antes de commitar.
  • Para limpar o índice e começar do zero, mas sem perder as mudanças nos ficheiros.

3. Desfazer o Último Commit e Descartar Todas as Alterações

Se deseja desfazer o commit e descartar completamente as alterações feitas, use git reset –hard.

git reset --hard HEAD^

Como Funciona:

  • –hard: Remove o último commit e todas as alterações associadas, restaurando o repositório e o diretório de trabalho ao estado do commit anterior.
  • Atenção: Este comando é destrutivo! As alterações descartadas não podem ser recuperadas, a menos que tenha uma cópia de segurança ou use o reflog (veja abaixo).

Exemplo Prático:

  1. Fez um commit com mudanças que não deseja manter.
  2. Execute:
    git reset --hard HEAD^
  3. O repositório volta ao estado do commit anterior, e as alterações são eliminadas.

Quando Usar:

  • Quando tem certeza de que as alterações do último commit não são necessárias.
  • Para limpar rapidamente um erro grave.

Cuidado:

Use com extrema cautela, pois as alterações são perdidas permanentemente do diretório de trabalho e do índice.

4. Desfazer um Commit Já Enviado para o Repositório Remoto

Se já enviou o commit para o repositório remoto (com git push), desfazer o commit exige passos adicionais, pois estará a alterar o histórico público.

Passos:

  1. Desfaça o commit localmente:
    • Use git reset –soft HEAD^ (para manter alterações) ou git reset –hard HEAD^ (para as descartar).
  2. Force o push para o remoto:
    git push origin main --force
    • Substitua main pelo nome da sua branch.
    • Atenção: O uso de –force reescreve o histórico remoto, o que pode afetar outros programadores. Use –force-with-lease para maior segurança, pois verifica se ninguém mais alterou o remoto.

Exemplo Prático:

  1. Fez um commit e enviou com git push origin main.
  2. Para desfazer:
    git reset --soft HEAD^ git push origin main --force-with-lease
  3. As alterações permanecem localmente, mas o commit é removido do remoto.

Quando Usar:

  • Quando o commit já foi enviado, mas precisa corrigir o histórico.
  • Comunique com a equipa antes de usar –force ou –force-with-lease.

5. Recuperar um Commit Desfeito (Usando o Reflog)

Se usou git reset –hard e quer recuperar o commit perdido, o Git mantém um registo no reflog.

git reflog

Como Funciona:

  • O git reflog mostra um histórico de todas as ações no HEAD, incluindo commits desfeitos.
  • Cada entrada tem um hash (ex: abc1234).
  • Para restaurar o commit perdido:
    git reset --hard abc1234

    Substitua abc1234 pelo hash do commit desejado.

Exemplo Prático:

  1. Após um git reset –hard, execute:
    git reflog

    Verá algo como:
    abc1234 HEAD@{0}: reset: moving to HEAD^ def5678 HEAD@{1}: commit: Adiciona nova funcionalidade
  2. Para restaurar o commit def5678:
    git reset --hard def5678

Quando Usar:

  • Quando desfaz um commit por engano e precisa recuperá-lo.
  • O reflog é um “salva-vidas” para erros acidentais.

Conselhos Práticos para Evitar Problemas

  1. Use git status frequentemente: Ajuda a compreender o estado atual do repositório.
  2. Escreva mensagens de commit claras: Facilita identificar o que cada commit faz.
  3. Faça commits menores: Commits pequenos são mais fáceis de gerir e desfazer.
  4. Teste antes de commitar: Use git diff para rever alterações antes de git add.
  5. Considere git revert como alternativa: Se não quer reescrever o histórico, git revert <commit-hash> cria um novo commit que desfaz as alterações, sem afetar o histórico público.

Conclusão

Desfazer o último commit no Git é uma tarefa comum e, com os comandos certos, pode ser feita de forma segura e eficiente. Use git reset –soft para manter alterações, git reset –mixed para reorganizar o índice, ou git reset –hard para descartar tudo. Para commits enviados ao remoto, combine git reset com git push –force-with-lease, mas com cuidado. E, se algo correr mal, o git reflog está lá para salvar o dia.Dominar estes comandos poupa tempo e aumenta a confiança no uso do Git. Se tiver dúvidas específicas ou quiser exemplos em cenários mais complexos, deixe um comentário abaixo! Para mais dicas sobre Git e programação, continue a acompanhar o nosso blogue.

Palavras-chave: Desfazer commit no Git, Git reset soft, Git reset hard, Reverter commit Git, Git reflog, Controlo de versões, Git para iniciantes.

Vamos trabalhar juntos
Envia-nos um email - hello@damascode.pt

Damascode – Digital Agency © 2025. All Rights Reserved.