14. Desfazendo commits

Metas

  • Aprender como desfazer commits no repositório local.

01 Desfazendo commits

Algumas vezes você percebe que os novos commits estão errados e você quer desfazê-los. Existem várias maneiras de resolver esse problema, mas nós usamos a mais segura aqui.

Para desfazer o commit, vamos criar um novo commit desfazendo as modificações não desejadas.

02 Edite o arquivo e faça um commit

Substitua o arquivo hello.html com o seguinte.

Arquivo: hello.html

<html>
  <head>
  </head>
  <body>
    <h1>Hello, World!</h1>
    <!-- This is an unwanted but committed change -->
  </body>
</html>

Execute

git add hello.html
git commit -m "Oops, we didn't want this commit"

03 Faça um commit com as novas modificações que desfazem as modificações anteriores

Para desfazer o commit, precisamos criar um commit que deleta as modificações feitas pelo commit indesejado.

Execute

git revert HEAD

Vá para o editor, onde você consegue editar a mensagem padrão do commit ou deixá-la como está. Salve e feche o arquivo.

Você verá:

Resultado

$ git revert HEAD
[main 86364a1] Revert "Oops, we didn't want this commit"
 Date: Tue Nov 28 05:51:38 2023 -0600
 1 file changed, 1 deletion(-)

Já que desfizemos o último commit, nós podemos usar HEAD como o argumento para desfazê-lo. Nós podemos cancelar qualquer commit no histórico, apontando seu hash.

04 Confira o log

Conferir o log mostra os cancelamentos e commits indesejados no nosso repositório.

Execute

git log

Resultado

$ git log
86364a1 2023-11-28 | Revert "Oops, we didn't want this commit" (HEAD -> main) [Alexander Shvets]
6a44bec 2023-11-28 | Oops, we didn't want this commit [Alexander Shvets]
b7614c1 2023-11-28 | Added HTML header (tag: v1) [Alexander Shvets]
46afaff 2023-11-28 | Added standard HTML page tags (tag: v1-beta) [Alexander Shvets]
78433de 2023-11-28 | Added h1 tag [Alexander Shvets]
5836970 2023-11-28 | Initial commit [Alexander Shvets]

Essa técnica pode ser aplicada para qualquer commit (mas podem surgir conflitos). É seguro usá-la mesmo em branches públicos de repositórios remotos.

05 Próximo

A seguir vamos olhar a técnica que pode ser usada para remover o último commit do histórico do repositório.