4.4 - Usando o git para viajar no tempo
Voltemos ao cenário que estamos tentando simular: O arquivo README.md foi excluído em um commit, e descobrimos que isto foi um erro. Ele não deveria ter sido removido. Neste exato momento, o git log
nos diz que o HEAD está apontando para o commit que fez a alteração. Mover o HEAD é a operação que nos permite caminhar pela linha do tempo e desfazer a história que o repositório conhece. Fazemos isso usando o comando git reset
, passando como argumento o id do commit para o qual queremos voltar.
Observe o que o git log nos diz agora. O commit que removia o arquivo README.md desapareceu da história. E agora o HEAD (junto com a branch main
) estão apontando para o commit inicial.
Mas se executarmos o comando ls
, não vemos lá o arquivo README.md. O diretório continua vazio. Mas se você usar o comando git status
vai reparar que existem mudanças prontas para serem registradas em um commit. E a mudança é justamente a exclusão do arquivo.
É como se o comando git reset
tivesse nos enviado devolta exatamente para o momento anterior ao último commit que fizemos, quando a alteração já estava na área de staging. Tudo o que precisamos fazer agora, é cancelar o staging, e mudamos a história:
E lá está o arquivo de volta, como se nunca tivesse sido excluído.
Mas e o commit que tínhamos feito? O que aconteceu com ele?
Ele ainda existe, e ainda está no banco de dados do repositório. E você poderia, se quisesse, usar novamente o comando git reset
para fazer o HEAD voltar a apontar para ele. Ou você poderia simplesmente ignorá-lo e voltar a trabalhar no seu diretório, reconstruindo a história a partir do ponto onde está agora.