mkdir exercice-reset && cd exercice-reset
git init
# Criar vários commits para testar
echo "print('v1')" > app.py && git add . && git commit -m "Version 1"
echo "print('v2')" > app.py && git add . && git commit -m "Version 2"
echo "print('v3')" > app.py && git add . && git commit -m "Version 3"
echo "print('v4')" > app.py && git add . && git commit -m "Version 4"
git log --oneline # Anotar os hashesObjetivo: recuar 2 commits, guardar as alterações staged.
git reset --soft HEAD~2
# Verificações
git status # Alterações na staging area?
cat app.py # Que conteúdo?
git log --oneline # Quantos commits?Resultado esperado:
v4Repor a zero e depois testar mixed:
git commit -m "Re-commit v4" # Voltar a pôr v4
git reset --mixed HEAD~1 # Recuar 1 commit (modo por omissão)
# Verificações
git status # Alterações não staged?
cat app.py # Que conteúdo?
git log --oneline # Quantos commits?Resultado esperado:
v4ATENÇÃO: Reset hard = destrutivo!
git add . # Stager as alterações
git commit -m "Re-commit v4" # Voltar a pôr v4
git reset --hard HEAD~2 # Apagar TUDO, recuar 2 commits
# Verificações
git status # Working directory limpo?
cat app.py # Que conteúdo?
git log --oneline # Quantos commits?Resultado esperado:
v2Resumo dos 3 modos:
| Modo | Commits | Staging | Working Directory |
|---|---|---|---|
--soft | Recua | Guarda | Guarda |
--mixed | Recua | Apaga | Guarda |
--hard | Recua | Apaga | Apaga |
Compreendeu os 3 modos? Perfeito! O Reset já não tem segredos.