Como Reverter um Commit no Git?

Entenda como desfazer mudanças no Git e corrigir erros com facilidade.

Introdução ao Git e aos Commits

O Git é um sistema de controle de versão distribuído amplamente utilizado por desenvolvedores de software para gerenciar e versionar o código-fonte de seus projetos. Um dos conceitos centrais do Git é o commit, que representa uma “fotografia” do estado do seu repositório em um determinado momento.

Às vezes, durante o desenvolvimento, pode ser necessário reverter um commit, seja porque ele introduziu um erro, ou porque o código precisa ser ajustado. Neste artigo, abordaremos como reverter um commit no Git, explicando os diferentes métodos e suas implicações.

Por Que Reverter um Commit?

Existem diversas razões pelas quais você pode querer reverter um commit no Git. As mais comuns incluem:

  • Erro no Código: Se você cometeu um erro em um commit, revertê-lo pode ajudar a voltar ao estado anterior do código sem problemas.
  • Problemas de Merge: Se um commit gerou conflitos durante um merge ou rebase, revertê-lo pode ser a solução mais rápida.
  • Experimentos Desnecessários: Caso tenha feito mudanças para testar algo que não deu certo, pode ser interessante reverter o commit e manter o histórico limpo.

Como Reverter um Commit no Git?

Existem várias maneiras de reverter um commit no Git, dependendo da sua situação. Abaixo, explicamos os principais métodos e como utilizá-los corretamente.

1. Revertendo um Commit com o Git Revert

O comando git revert cria um novo commit que desfaz as mudanças feitas pelo commit anterior. Esse método é seguro porque preserva o histórico de commits, ao contrário de outros métodos que podem reescrever o histórico.

git revert 

O Git abrirá um editor de texto para você modificar a mensagem do commit de reversão. Você pode salvar a mensagem padrão ou criar uma mensagem personalizada.

Exemplo

Se o ID do commit que você deseja reverter for abc123, execute o seguinte comando:

git revert abc123

Após isso, o Git criará um novo commit que desfaz as alterações feitas no commit abc123.

2. Usando Git Reset para Reverter Commits

O comando git reset é mais poderoso e pode ser usado para reverter um commit. Porém, ele tem implicações mais sérias no seu histórico, pois pode alterar o histórico de commits. É importante ter cuidado ao usar git reset em repositórios compartilhados.

O comando git reset tem três opções principais:

  • –soft: Move o ponteiro HEAD para o commit especificado, mas mantém as mudanças no seu diretório de trabalho.
  • –mixed: Move o ponteiro HEAD para o commit especificado e também desfaz as mudanças do diretório de trabalho (mas sem afetar o histórico).
  • –hard: Move o ponteiro HEAD e também desfaz todas as alterações, incluindo as do diretório de trabalho.

Exemplo de Git Reset

Para reverter um commit com git reset, digamos que você deseja voltar para o commit anterior ao abc123:

git reset --hard abc123

Este comando fará com que seu repositório volte ao estado do commit abc123, e todos os commits após esse ponto serão removidos permanentemente (no seu repositório local).

3. Revertendo Múltiplos Commits com Git Reset

Você pode também reverter vários commits de uma vez, especificando o commit para o qual deseja voltar. Por exemplo, para voltar três commits atrás:

git reset --hard HEAD~3

Isso fará com que o Git reverter todos os commits realizados após o terceiro commit anterior ao HEAD.

4. Usando Git Checkout para Reverter Arquivos Modificados

Se você deseja reverter alterações em arquivos específicos, sem afetar o histórico de commits, pode usar o comando git checkout para restaurar arquivos específicos para o estado do commit anterior.

git checkout  -- 

Isso restaurará o arquivo path_to_file para o estado em que ele estava no commit commit_id.

Exemplo de Git Checkout

Se você quiser restaurar o arquivo app.js para o estado do commit abc123, use:

git checkout abc123 -- app.js

Diferença entre Git Reset e Git Revert

É importante entender as diferenças entre os comandos git reset e git revert. Ambos são usados para desfazer commits, mas de maneiras diferentes:

  • Git Revert: Cria um novo commit que desfaz as alterações do commit anterior. Ideal para reverter commits em repositórios públicos, pois preserva o histórico.
  • Git Reset: Move o ponteiro HEAD para um commit anterior, alterando o histórico. Ideal para reverter commits em repositórios privados ou locais, mas deve ser usado com cautela em repositórios compartilhados.

Cuidados ao Reverter Commits

Ao reverter commits, especialmente em repositórios compartilhados, você deve ter cuidado para não causar problemas para outros desenvolvedores que estão trabalhando no mesmo código. O uso de git reset --hard pode resultar na perda permanente de dados, por isso é importante fazer backup do seu trabalho antes de usá-lo.

Além disso, ao usar git revert ou git reset, sempre verifique o impacto de suas ações nos branches e no histórico de commits. Se estiver trabalhando em equipe, considere discutir as alterações com seus colegas antes de realizar a reversão.

Conclusão

Reverter um commit no Git pode ser uma tarefa simples, mas exige cuidado, especialmente em repositórios compartilhados. Se você precisar desfazer alterações, o comando git revert é geralmente a escolha mais segura, pois preserva o histórico. Por outro lado, git reset é mais poderoso e pode ser usado para reverter commits de maneira mais direta, mas deve ser usado com cautela.

Com os métodos descritos neste artigo, você estará bem preparado para reverter commits no Git de forma eficiente e segura. Lembre-se de sempre revisar o histórico antes de aplicar mudanças permanentes e, sempre que possível, mantenha uma cópia de segurança do seu trabalho.