10. Usando versões anteriores

Metas

  • Aprender como aplicar qualquer snapshot anterior ao diretório de trabalho.

O Git torna possível viajar no tempo, pelo menos para seu projeto. O comando checkout atualizará seu diretório de trabalho para qualquer commit anterior.

01 Conseguindo os hashes das versões anteriores

Execute

git log

Resultado

$ git log
b7614c1 2023-11-28 | Added HTML header (HEAD -> main) [Alexander Shvets]
46afaff 2023-11-28 | Added standard HTML page tags [Alexander Shvets]
78433de 2023-11-28 | Added h1 tag [Alexander Shvets]
5836970 2023-11-28 | Initial commit [Alexander Shvets]

Confira a data do log e encontre o hash do primeiro commit. Você vai achar ele na última linha do git log Use o código (os seus 7 primeiros caracteres são suficientes) no comando abaixo. Depois disso, cheque o conteúdo do arquivo hello.html.

Execute

git checkout <hash>
cat hello.html

Muitos comandos do Git aceitam hashes de commit como argumentos. Os hashes de commit variam de repositório para repositório, portanto, quando você vir um comando com a marca <hash>, isso significa que você precisa substituí-lo pelo hash real do seu repositório.

Você verá:

Resultado

$ git checkout 5836970
Note: switching to '5836970'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5836970 Initial commit
$ cat hello.html
Hello, World!

Observe que agora o conteúdo do arquivo `hello.html' é o mesmo do texto com o qual começamos.

02 Voltando para a versão mais atual no branch main

Para retornar à versão mais recente do nosso código, precisamos alternar para a ramificação padrão main. Podemos usar o comando switch para alternar entre as ramificações.

O comando checkout tem sido um canivete suíço no mundo do Git há muito tempo. Ele tem várias opções que permitem que você execute coisas totalmente diferentes: alternar ramificações, redefinir código etc. Em algum momento, a equipe do Git decidiu dividir o comando em vários comandos. O comando switch é um deles - seu único objetivo é alternar entre as ramificações. O comando checkout ainda está disponível, mas não é mais recomendável usá-lo para alternar as ramificações.

Execute

git switch main
cat hello.html

Você verá:

Resultado

$ git switch main
Previous HEAD position was 5836970 Initial commit
Switched to branch 'main'
$ cat hello.html
<html>
  <head>
  </head>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

main é o nome do branch padrão. Ao mudar para uma ramificação, você vai para a versão mais recente.