Dominando Git

Dominando o Git – Parte 2 – Como desfazer commits

Bruno Carneiro

Bruno Carneiro

Na parte 1 vimos como iniciar com o Git e que a maior parte dos comandos da ferramenta funcionam offline. Seguindo a sequência, agora vamos ver como desfazer commits quando algo der errado!

Vamos supor que você fez uma alteração indesejada no arquivo aquiAconteceMagica.js e que você percebeu esse erro um dia depois, quando já havia desligado o seu notebook. Ou seja, Ctrl+Z não funciona mais.

Desfazendo alterações antes de ter feito commit

Esse é o caso mais simples. Primeiro, veja as suas alterações através do comando:
git diff

Como desfazer commits - git diff

De verde, o Git vai mostra as linhas adicionadas e de vermelho as linhas removidas. Dessa forma, você pode corrigir manualmente o que você fez de errado. Ou se quiser voltar para a versão antes das suas alterações use o comando:

git checkout aquiAconteceMagica.js

Legal Bruno! O problema é que eu já havia feito o commit  e o git diff não está mostrando nada.

Desfazendo alterações depois de ter feito commit

Visualizando o histórico de commits

Se você já fez o commit da alteração significa que o Git já armazenou sua mudança no histórico de commits. Mas calma, isso pode ser revertido!

Primeiramente, vamos visualizar no histórico de commits se o sua alteração está lá:
git log

Como desfazer commits - git log

Removendo o commit do histórico

Se você quiser voltar para o commit anterior rode o comando:
git reset HEAD~1

Ou se quiser voltar o código para qualquer commit:
git reset bd89ee8157ccb66ea4474777ea1e7e8c66a379f6

Essa string gigantesca é o id do commit. Você pode ver ele no histórico. Dessa maneira, você consegue reverter o código para qualquer commit do histórico do seu projeto.

Se você rodar o git log vai ver que o commit não está mais lá.

Verdade! Mas abri o arquivo no editor e ele não foi alterado!

Isso mesmo! Para sua segurança e de todos do seu time, por padrão, o Git não perde nenhum código! Ou seja, o que o Git fez foi apagar o seu commit do histórico mas manter suas modificações da forma que estavam antes de você fazer o commit.

Rode novamente git diff e veja as alterações. Agora, você pode executar o comando que te ensinei no começo desse artigo – git checkout aquiAconteceMagica.js

ZONA DE PERIGO – Removendo o commit do histórico e todas as suas alterações

Como disse anteriormente, por padrão o Git não perde o código que já está em um commit. Porém, você pode dizer para ele que realmente quer remover as alterações. Use o reset da seguinte forma:
git reset --hard bd89ee8157ccb66ea4474777ea1e7e8c66a379f6

Tenha muito cuidado porque todas as alterações desse commit serão deletadas completamente sem nem te perguntar algo como “Tem certeza que deseja deletar todas as mudanças desse commit?”.

Mais sobre Git

Ainda existem muitos outros “segredos” no Git que vão te ajudar a dominar ferramenta e impressionar seus colegas. Vou continuar escrevendo sobre o assunto nessa série “Dominando o Git“.

Enquanto não sai um outro post sugiro você ler o livro gratuito Pro Git.

 

2 Comments

  1. Boas dicas!! Acho válido explicar mais sobre o real perigo de se apagar um commit do histórico depois que um push desse commit ja foi feito em um remote. Abraço!!

Deixe um comentario