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.

Agora responda o exercício sobre o conteúdo:

Qual das seguintes afirmações sobre os comandos `git revert` e `git reset` é correta?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Branching: o que são branches?

Próxima página do Ebook Gratuito:

14Branching: o que são branches?

5 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, áudio e texto