Desfazendo erros com segurança: restore, reset, revert, reflog
A notícia mais tranquilizadora de todo o curso: o Git quase nunca perde seu trabalho de verdade. Quase todo erro é reversível, se você souber qual ferramenta usar. Nesta aula vamos montar uma caixa de ferramentas de recuperação pequena e clara, com quatro ferramentas, cada uma com o seu 'quando'. gi
restore é 'desfaça o que estou editando agora'. reset é 'me leve de volta no tempo' (e --hard também apaga, então cuidado). revert é 'adicione uma página que cancela uma página antiga' — seguro para a equipe. reflog é uma câmera de segurança que lembra para onde o HEAD se moveu, mesmo quando parece que você perdeu o trabalho.
- git restore
- Descarta mudanças no diretório de trabalho (git restore <file>) ou tira um arquivo do staging (git restore --staged <file>). Não mexe no histórico.
- git reset
- Move o HEAD (e o branch) para um commit anterior. --soft mantém as mudanças no staging, --hard também descarta as mudanças do diretório de trabalho. Seguro só em histórico local.
- git revert
- Cria um commit novo que reverte a mudança de um commit anterior, sem reescrever o histórico. O jeito seguro de desfazer algo que já foi enviado (push) e compartilhado.
- git reflog
- Um registro local de todo lugar onde o HEAD já esteve. Permite encontrar o hash de um commit que parecia 'perdido' depois de um reset e recuperá-lo. Sua rede de segurança.
- Histórico compartilhado (shared history)
- Commits que já foram enviados (push) e que outras pessoas talvez já tenham puxado (pull). Reescrevê-los quebra a cópia da equipe — por isso, neles você usa revert, não reset --hard.