Git Reset

2 min

Tabla de contenidos

  1. ¿Qué es reset?
  2. Los 3 modos de reset
  3. Reset soft
  4. Reset mixed
  5. Reset hard
  6. Peligro y precauciones
  7. Comandos prácticos

1. ¿Qué es reset?

Git reset = retroceder en el tiempo anulando commits.

Concepto:

  • Desplazar la rama hacia un commit anterior
  • 3 modos según lo que se conserve o se elimine
  • DESTRUCTIVO si se usa mal

Analogía: es como borrar páginas de un cuaderno.

Volver a la tabla de contenidos

2. Los 3 modos de reset

ModoCommitsIndex/stagingWorking directory
--softAnulaConservaConserva
--mixedAnulaBorraConserva
--hardAnulaBorraBorra

Memo simple:

  • Soft = solo los commits
  • Mixed = commits + staging
  • Hard = TODO (¡peligroso!)

Volver a la tabla de contenidos

3. Reset soft

Uso: rehacer el último commit con más cambios.

bash
mkdir demo-reset && cd demo-reset
git init

echo "print('v1')" > app.py && git add . && git commit -m "Version 1"
echo "print('v2')" > app.py && git add . && git commit -m "Version 2"

# Reset soft: anula el commit, lo deja todo en staging
git reset --soft HEAD~1

git status                    # Cambios preparados, listos
git log --oneline            # Un commit menos
cat app.py                   # El contenido v2 sigue ahí

# Nuevo commit con un mensaje mejorado
git commit -m "Version 2 - Avec nouvelles features"

Volver a la tabla de contenidos

4. Reset mixed

Uso: anular commits Y quitarlos del staging (modo por defecto).

bash
echo "print('v3')" > app.py && git add . && git commit -m "Version 3"

# Reset mixed (o simplemente git reset)
git reset HEAD~1

git status                   # Cambios NO preparados
git log --oneline           # Commits anulados
cat app.py                  # El contenido v3 sigue ahí, pero no en staging

# Hay que volver a añadir antes del commit
git add . && git commit -m "Version 3 - Refait proprement"

Volver a la tabla de contenidos

5. Reset hard

PELIGRO: ¡borra TODO, incluso tus modificaciones sin commit!

bash
echo "print('v4')" > app.py && git add . && git commit -m "Version 4"

# Modificaciones en curso
echo "print('work in progress')" >> app.py

# Reset hard: TODO DESAPARECE
git reset --hard HEAD~1

git status                  # Working directory limpio
cat app.py                 # Vuelta a v2, work in progress PERDIDO

Uso: cuando de verdad quieres tirarlo todo y volver atrás.

Volver a la tabla de contenidos

6. Peligro y precauciones

Reset es DESTRUCTIVO con commits compartidos.

NUNCA hagas esto:

bash
git push origin main           # Commits compartidos con el equipo  
git reset --hard HEAD~3        # Borra 3 commits compartidos
git push --force              # Fuerza el borrado en todo el mundo
# = ¡CAOS en el equipo!

Regla de seguridad:

  • Reset OK en commits locales (sin push)
  • Reset PROHIBIDO en commits ya compartidos
  • Alternativa: git revert (más seguro)

Volver a la tabla de contenidos

7. Comandos prácticos

ComandoAcción
git reset HEAD~1Anula 1 commit (mixed)
git reset --soft HEAD~2Anula 2 commits, conserva el staging
git reset --hard HEAD~1Anula 1 commit, borra TODO
git reset <hash>Volver a un commit concreto
git reset --hard origin/mainReset a la versión remota

Reset = potente pero peligroso. ¡Úsalo con precaución!

Volver a la tabla de contenidos