Categorias
GIT

Estratégias para voltar a versão anterior no GIT. (desfazer commit errado)

Vejas algumas estratégias para voltar a versão anterior no GIT. (desfazer commit errado)

git checkout

Utilizando o comando git checkout, podemos dar checkout no commit anterior, ex a1e8fb5, colocando o repositório em um estado antes do commit problemático acontecer.

git checkout a1e8fb5

Ao dar checkout em um commit específico, você colocará o repo em um estado “HEAD desvinculado (detached)”. Isso quer dizer que você não está mais trabalhando em nenhuma ramificação (branch).

Em um estado desvinculado, qualquer novo commit feito ficará órfão quando você mudar ramificações de volta a uma ramificação estabelecida. Commits órfãos serão excluídos pelo coletor de lixo do Git. O coletor de lixo executa em um intervalo configurado e destrói permanentemente commits órfãos. Para evitar que commits órfãos sejam coletados como lixo, precisamos garantir que estamos em uma ramificação.

git revert

Vamos supor que estejamos de volta ao nosso exemplo de histórico de commit original. O histórico que inclui o commit 872fa7e. Desta vez, vamos tentar reverter um “desfazer”. Se executarmos git revert HEAD, o Git criará um novo commit com o inverso do último commit. Isso adiciona um novo commit ao histórico de ramificação atual e agora o faz parecer assim:

git revert fadf87e

git reset

O git reset é um comando extenso com vários usos e funções. Se executarmos o git reset –hard a1e8fb5, o histórico de commit é redefinido para aquele commit específico.

A saída de log mostra que as confirmações e2f9a78 e 872fa7e não existem mais no histórico de confirmação. Neste ponto, podemos continuar trabalhando e criando novos commits como se os commits ‘problemáticos’ nunca tivessem acontecido.

Esse método de desfazer alterações tem o efeito mais limpo no histórico. Fazer uma redefinição é ótimo para alterações locais, no entanto, adiciona complicações ao trabalhar com um repositório remoto compartilhado. Se tivermos um repositório remoto compartilhado que tenha o 872fa7e commit empurrado para ele, e tentarmos forçar o push de uma ramificação onde redefinimos o histórico, o Git irá detectar isso e lançar um erro. O Git assumirá que a ramificação que está sendo enviada não está atualizada devido à falta de commits. Nestes cenários, git revert deve ser o método de desfazer preferido.