mkdir exercice-reset && cd exercice-reset
git init
# Crear varios commits para probar
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 los hashesObjetivo: volver 2 commits atrás y conservar los cambios en staging.
git reset --soft HEAD~2
# Comprobaciones
git status # ¿Cambios en el área de staging?
cat app.py # ¿Qué contenido?
git log --oneline # ¿Cuántos commits?Resultado esperado:
v4Puesta a cero y luego prueba mixed:
git commit -m "Re-commit v4" # Volver a poner v4
git reset --mixed HEAD~1 # Volver 1 commit (modo por defecto)
# Comprobaciones
git status # ¿Cambios no preparados?
cat app.py # ¿Qué contenido?
git log --oneline # ¿Cuántos commits?Resultado esperado:
v4ATENCIÓN: reset hard = destructivo.
git add . # Preparar los cambios
git commit -m "Re-commit v4" # Volver a poner v4
git reset --hard HEAD~2 # Borrar TODO, volver 2 commits
# Comprobaciones
git status # ¿Working directory limpio?
cat app.py # ¿Qué contenido?
git log --oneline # ¿Cuántos commits?Resultado esperado:
v2Resumen de los 3 modos:
| Modo | Commits | Staging | Working directory |
|---|---|---|---|
--soft | Retrocede | Conserva | Conserva |
--mixed | Retrocede | Elimina | Conserva |
--hard | Retrocede | Elimina | Elimina |
¿Has entendido los 3 modos? Perfecto. Reset ya no tiene secretos.