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 comandoswitch
é um deles - seu único objetivo é alternar entre as ramificações. O comandocheckout
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.