Complementando, já escrevi um post mais detalhado sobre o assunto:
E aproveitando, seguem outros posts que escrevi sobre o Git (e que de certa forma complementam o primeiro, já que te dão uma visão mais clara e ampla sobre como funciona um repositório do Git):
- (Git internals) Como o Git grava os conjuntos de modificações do repositório?
- Você conhece os comandos switch e restore?
- Qual a diferença entre as opções "--soft", "--mixed e "--hard" no git reset?
- É possível commitar apenas parte das alterações?
Por fim, tem também este comentário sobre reflog
, esta sim a verdadeira "máquina do tempo" do Git :-)