Desfazendo os últimos commits usando git reset
Como tudo que fazemos em git pode ser feito de inúmeras formas diferentes, existem alguns jeitos de se livrar de commits, a forma mais comum de desfazer um ou mais commits recentes é usando o comando git reset
que vou te mostrar nessa colinha.
O que é o HEAD?
O HEAD
é um ponteiro que indica qual branch e commit você está. Ele é usado com frequência e muitas vezes sem você mesmo saber que ele é acessado para trocar de branches por exemplo.
O que é o git reset?
O git reset
por sua vez é um comando que restaura um estado anterior do HEAD
, por isso que usamos o HEAD
ao desfazer commits, para indicar qual o estado anterior que você quer voltar.
Por exemplo suponha que você tem um estado como o a seguir:
Se você quer desfazer o último commit B
você quer voltar ao estado do commit A
.
Desfazendo o último commit
Para desfazer o último commit feito você deve usar o comando a seguir:
git reset HEAD~1
Ou o comando a seguir, que é um atalho para o comando acima:
git reset HEAD^
Ou até mesmo o atalho a seguir:
git reset HEAD~
Esses três comandos querem dizer o seguinte:
Volte ao estado anterior ao último commit.
Note que ao executar esses comandos, você não verá mensagem informando que o commit foi desfeito, mas se você rodar o comando git status
após fazer algum desses três comandos verá que arquivos adicionados e/ou alterações feitas voltam a serem marcados como alterações a serem commitadas (adicionadas à um commit).
Veja, suponha que você tenha um histórico como o da imagem a seguir, onde o último commit (48ccb8
) adiciona o arquivo chamado arquivo-4.txt
:
E se você executar algum dos comandos acima seguido de um git status
você verá um resultado assim:
E pode ver que o arquivo-4.txt
voltou ao seu estado anterior que era esperando ser feito o commit. E se investigar o histórico novamente verá que o commit 48ccb8
não aparece mais.
Agora você pode descartar as alterações ou continuar com elas e fazer um novo commit.
Desfazendo os três últimos commits
Agora que você sabe desfazer um commit, você pode usar o primeiro comando que acabou de ver e adpatá-lo para desfazer mais commits, para isso basta adicionar a quantidade de commits que você quer desfazer depois do ~
. Vamos olhar novamente o nosso histórico que agora contém apenas quatro os commits (pois já desfiz um):
Agora vamos supor que eu quero voltar ao estado do commit d815be
que é o commit inicial que adicionou o arquivo README.md
. Para isso é necessário desfazer três commits, então para isso o comando indicado é este:
git reset HEAD~3
Ao executá-lo e rodar mais uma vez o git status
temos os três arquivos que foram adicionados pelos commits desfeitos:
Note que antes de executar esses comandos eu removi o arquivo-4.txt
já que não vou precisar mais dele. E investigando novamente o histórico vemos apenas o commit inicial:
Antes de terminar a colinha eu quero deixar uma recomendação: é uma boa prática evitar desfazer commits que você já tenha feito push para evitar de causar problemas de detached HEAD
para outras pessoas trabalhando junto com você.
GitFichas
Abaixo você encontra GitFichas pra te ajudar a lembrar desses comandos e atalhos:
Espero que essa colinha te ajude a desfazer commits. 😉