12. Usando versões anteriores

Metas

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

Voltar no histórico é bem simples. O comando checkout pode copiar qualquer snapshot do repositório para o diretório de trabalho.

01 Conseguindo os hashes das versões anteriores

Execute:

git hist

Nota: Não esqueça de definir o alias hist no seu arquivo .gitconfig. Se você não lembra como fazer isso, reveja a lição sobre aliases.

Resultado:

$ git hist
* fa3c141 2011-03-09 | Added HTML header (HEAD, master) [Alexander Shvets]
* 8c32287 2011-03-09 | Added standard HTML page tags [Alexander Shvets]
* 43628f7 2011-03-09 | Added h1 tag [Alexander Shvets]
* 911e8c9 2011-03-09 | First Commit [Alexander Shvets]

Confira a data do log e encontre o hash do primeiro commit. Você vai achar ele na última linha do git hist 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

Nota: Vários comandos dependem dos valores de hash do repositório. Já que os meus valores de hash serão diferentes dos seus, faça as substituições apropriadas no seu hash do repositório todas as vezes que você ver <hash> ou <treehash> no comando.

Você verá …

Resultado:

$ git checkout 911e8c9
Note: checking out '911e8c9'.

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 performing another checkout.

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

  git checkout -b new_branch_name

HEAD is now at 911e8c9... First Commit
$ cat hello.html
Hello, World

O resultado do comando checkout esclarece completamente a situação. Versões mais antigas do git vão reclamar sobre não estarem em um branch local. Mas você não precisa de preocupar com isso agora.

Perceba que o conteúdo do arquivo hello.html é o conteúdo padrão.

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

Execute:

git checkout master
cat hello.html

Você verá …

Resultado:

$ git checkout master
Previous HEAD position was 911e8c9... First Commit
Switched to branch 'master'
$ cat hello.html
<html>
  <head>
  </head>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

‘master’ é o nome do branch padrão. Ao entrar em um branch pelo seu nome, você vai para a sua versão mais atual.