6. Histórico

Revertendo alterações feitas em commits antigos

Certo, já aprendemos a conferir o histórico do nosso repositório e a comparar alterações entre commits.

E se descobrirmos um bug em um commit feito um tempo atrás? Como desfazer as alterações feitas por esse commit?

Vamos descobrir

O jeito mais simples de desfazer alterações é fazer manualmente o inverso e commitar o resultado. Mas e se as alterações forem complexas e você não quiser mexer nelas?

Para reverter qualquer commit anterior no Git, use o comando

seguido do hash. Repare: esse comando não exclui o commit; ele cria um novo com as alterações inversas. Adicionar um commit extra pode parecer redundante, mas ajuda a manter o histórico consistente. Afinal, e se você perceber que as alterações revertidas estavam certas, no fim das contas?

Faz sentido

Vamos praticar. Primeiro, vamos introduzir um "bug" no nosso código.

Arquivo: hello.html
<html>
    <head>
        <link rel="stylesheet" href="style.css"/>
    </head>
    <body>
        <h1>Hello, World!</h1>
        <p>This is a bug!</p>
    </body>
</html>
Tarefa
Concluída

Adicione a linha <p>This is a bug!</p> ao hello.html, adicione as alterações ao stage e faça o commit com a mensagem Introduced a bug.

Ótimo! Agora ainda podemos cancelar as alterações com git commit --amend. Mas e se descobrirmos o erro tarde demais? Vamos fazer mais um commit razoável e depois mostrar como reverter o commit anterior, que continha as alterações indesejadas.

Arquivo: hello.html
<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="style.css"/>
    </head>
    <body>
        <h1>Hello, World!</h1>
        <p>This is a bug!</p>
    </body>
</html>
Tarefa
Concluída

Adicione a linha <!DOCTYPE html> ao hello.html, adicione as alterações ao stage e faça o commit com a mensagem Added HTML5 doctype.

Agora, vamos conferir o hash do commit que introduziu o bug. Execute git log para descobrir.

Tarefa
Concluída

Execute git log e encontre o hash do commit que introduziu o bug.

Dica: lembre-se de que você pode rolar a saída do git log usando as setas e do teclado. Para sair do modo pager, pressione q.

Com o hash do commit, agora podemos reverter as alterações feitas por esse commit. Substitua <commit> pelo hash real no comando a seguir:

Executar no terminal:
git revert <commit>

Isso vai abrir seu editor de texto padrão e pedir uma mensagem de commit. Você pode deixar a mensagem padrão, salvar e fechar o arquivo.

Tarefa
Concluída

Reverta o commit que introduziu o bug usando git revert.

Ótimo, o bug foi revertido. Agora confira o diff gerado pelo último commit. Lembra como fazer isso com

? Você vai precisar lembrar como o commit anterior ao mais recente.

Tarefa
Concluída

Confira o diff entre os dois últimos commits.

Essas são as alterações inversas do commit que introduziu o bug. É assim que se reverte qualquer commit do repositório.

Atenção: reverter alterações dessa forma não é infalível e pode gerar conflitos se o Git não conseguir aplicar o inverso. Nesse caso, você vai precisar resolver os conflitos manualmente. Se quiser aprender mais sobre resolução de conflitos, fique por aqui depois do curso principal.

Next step
Quer testar o modo história?

Faça o curso do jeito que ele foi pensado: avance aos poucos, siga uma sequência linear, mantenha o foco e desbloqueie gradualmente as entradas da Gitopedia. Quando quiser, continue praticando com o Git de verdade no VS Code, Cursor ou Antigravity IDE.

Modo história
GRATUITO
mas precisa de login