13. Desfazendo Mudanças Locais com Git: Revert e Reset
Quando trabalhamos com versionamento de código usando Git, é comum fazer alterações que, por algum motivo, desejamos desfazer. Seja porque cometemos um erro, seja porque queremos voltar a um estado anterior do projeto, o Git oferece ferramentas poderosas para desfazer mudanças locais: o git revert
e o git reset
.
O Comando git revert
O comando git revert
é usado para desfazer as alterações introduzidas por um commit específico, criando um novo commit com o conteúdo revertido. Esta é uma maneira segura de desfazer mudanças, pois não altera o histórico do repositório. Em outras palavras, o git revert
é uma forma de "voltar no tempo" sem apagar a história de como você chegou até ali.
git revert [commit_hash]
Para usar o git revert
, você precisa especificar o hash do commit que deseja reverter. O Git então criará um novo commit que é o inverso exato do commit especificado. Isso é útil quando você precisa manter o registro de que algo foi desfeito, ou quando está trabalhando em um repositório compartilhado onde apagar o histórico seria problemático para outros colaboradores.
O Comando git reset
O comando git reset
, por outro lado, é uma ferramenta mais drástica. Ele é usado para redefinir o estado atual do seu repositório para um commit anterior, descartando as alterações que foram feitas depois desse commit. Existem três principais formas de usar o git reset
: --soft
, --mixed
e --hard
.
Reset Soft
git reset --soft [commit_hash]
O --soft
mantém todas as suas mudanças atuais no estado de "modificações a serem commitadas" (staged changes). Isso é útil quando você quer redefinir o HEAD do seu repositório a um commit anterior, mas pretende manter as alterações feitas para fazer um novo commit com elas.
Reset Mixed
git reset --mixed [commit_hash]
O --mixed
é a opção padrão do git reset
. Ele irá desfazer o commit e as mudanças que você fez serão mantidas no seu diretório de trabalho, mas não estarão staged. Isso significa que você terá que adicionar as alterações novamente antes de poder commitá-las.
Reset Hard
git reset --hard [commit_hash]
O --hard
é a opção mais radical. Ele irá redefinir o HEAD, o index e o diretório de trabalho para o estado de um commit anterior. Todas as alterações feitas após o commit especificado serão perdidas. Esta opção deve ser usada com cuidado, pois não há como recuperar as mudanças descartadas.
Escolhendo entre Revert e Reset
A escolha entre git revert
e git reset
depende da situação e do que você deseja alcançar. Se você está trabalhando em um repositório compartilhado e deseja desfazer um commit sem afetar outros colaboradores, o git revert
é a escolha apropriada. Se você está trabalhando localmente e fez algo que deseja desfazer completamente, o git reset
pode ser o caminho a seguir.
Exemplo Prático
Vamos supor que você tenha feito um commit que, após revisão, você percebeu que não deveria ter sido feito. Para reverter esse commit, você pode usar:
git revert [commit_hash]
O Git irá criar um novo commit que desfaz as mudanças do commit especificado. Se você quiser voltar a um estado anterior do projeto e descartar todos os commits feitos após um certo ponto, você pode usar:
git reset --hard [commit_hash]
Isso irá alterar o estado do seu diretório de trabalho para o estado do commit especificado, descartando todas as mudanças feitas desde então.
Cuidados ao Desfazer Mudanças
É importante ter cuidado ao desfazer mudanças, especialmente ao usar o git reset --hard
. Uma vez que as mudanças são descartadas com essa opção, elas não podem ser recuperadas a menos que você tenha feito um backup delas de alguma forma. Sempre verifique duas vezes antes de usar comandos que podem resultar em perda de dados.
Conclusão
O Git é uma ferramenta poderosa para controle de versão, e entender como desfazer mudanças é fundamental para gerenciar seu código de forma eficaz. O git revert
e o git reset
são comandos valiosos que oferecem diferentes níveis de controle sobre o histórico do seu repositório e o estado do seu projeto. Ao usá-los com cuidado e compreensão, você pode navegar pelo seu histórico de código e gerenciar suas mudanças com confiança.