Desfazendo Commits

Durante o desenvolvimento, é comum fazer commits e, em alguns momentos, perceber que algo precisa ser alterado. O Git oferece maneiras simples de desfazer commits feitos localmente, para que você possa corrigir ou ajustar as alterações antes de enviá-las para o repositório remoto.

Aqui vamos focar nas formas mais simples e seguras de desfazer commits, sem complicações, para que você possa corrigir seus erros sem afetar o histórico de forma complicada.

Reverter um Commit Específico

Se você deseja desfazer um commit que não é o último, o Git oferece uma maneira simples de fazer isso sem complicação. A melhor maneira de reverter um commit antigo é usando o comando git revert.

O git revert cria um novo commit que desfaz as alterações de um commit específico. Isso é útil quando você deseja desfazer algo que já foi feito, mas não quer afetar outros commits feitos depois desse.

Para reverter um commit antigo, você deve primeiro identificar o "hash" do commit que deseja desfazer. O hash é um identificador único para cada commit. Você pode visualizar o histórico de commits com o comando:

git log

Depois de encontrar o hash do commit, use o comando:

git revert hash-do-commit

O Git criará um novo commit que desfaz as alterações daquele commit. Assim, seu histórico de commits ficará preservado, e você ainda conseguirá corrigir o erro.

Desfazer Últimos Commits

Se você cometeu um erro no último commit ou percebeu que não deveria ter feito aquele commit, você pode facilmente desfazê-lo. Existem duas formas principais de desfazer o último commit, dependendo do que você deseja fazer com as alterações:

Desfazer o Último Commit, Mantendo as Alterações

Se você quer desfazer o commit, mas manter as alterações feitas nos arquivos (como se você tivesse apenas esquecido de fazer o commit), use o comando:

git reset --soft HEAD~1

Esse comando desfaz o último commit, mas mantém as alterações tanto na área de staging (onde ficam os arquivos prontos para o commit) quanto nos arquivos locais. Ou seja, é como se você tivesse feito o git add, mas ainda não tivesse feito o commit.

Desfazer o Último Commit, Removendo as Alterações da Área de Staging

Se você já adicionou os arquivos à área de staging (usando git add), mas quer desfazer o commit e retirar os arquivos da área de staging, mantendo as alterações feitas nos arquivos, use:

git reset HEAD~1

Esse comando desfaz o último commit e remove os arquivos da área de staging, mas as alterações ainda vão permanecer nos seus arquivos locais. Ou seja, os arquivos vão voltar para o estado "modificado", mas não estarão mais preparados para o commit.

Desfazendo "n" Últimos Commits

Se você deseja desfazer mais de um commit, basta alterar o número após HEAD~. Por exemplo, para desfazer os últimos dois commits, você pode usar:

git reset --soft HEAD~2

Ou, se quiser também remover as mudanças da área de staging, use:

git reset HEAD~2

Isso irá desfazer dois commits de uma vez, e você pode ajustar o número conforme necessário.

Considerações Finais

  • Git Reset x Git Revert:

    • Use o git reset para desfazer commits recentes, caso ainda não tenha enviado as alterações para o repositório remoto. É uma forma rápida de voltar para um estado anterior sem deixar rastros no histórico.

    • Use o git revert para desfazer commits antigos ou quando você precisa manter o histórico de commits intacto. Ele cria um novo commit que reverte as alterações feitas, o que é mais seguro caso você já tenha compartilhado os commits com outras pessoas.

Evite Modificar o Histórico Remoto

Caso você já tenha enviado os commits para o repositório remoto, evite usar git reset para alterar o histórico. Modificar o histórico de commits pode causar problemas se outras pessoas já tiverem feito fetch ou pull dessas alterações.

Essas são as formas mais comuns e seguras de desfazer commits locais no Git, ideais para iniciantes que estão começando a se familiarizar com o controle de versões.

Esta é uma explicação simplificada para fins didáticos. Para explorar todas as possibilidades dos comandos gitreset e gitrevert, consulte as documentações oficiais:

Last updated

Was this helpful?