[Comandos Git] Checkout vs Reset vs Revert

  • Autor de la entrada:
  • Categoría de la entrada:Git
  • Comentarios de la entrada:Sin comentarios
Tiempo de lectura estimado: 3 minutos

Git Switch vs Restore vs Reset vs Revert

Domina los comandos modernos de Git para deshacer cambios sin romper tu repositorio.

⚠️ Importante: Esta guía está actualizada con los comandos modernos de Git (versión 2.23+).

¿Por qué necesitas dominar estos comandos?

Situación 1: “Hice commit de archivos con credenciales por accidente”
Situación 2: “Necesito ver cómo estaba el código antes del último cambio”
Situación 3: “Desplegué un bug a producción y necesito revertirlo YA”

Git Switch: El Cambiador de Ramas Moderno

REEMPLAZO MODERNO para git checkout cuando trabajas con ramas.

Cuándo usarlo:

  • Para cambiar entre ramas existentes
  • Para crear y cambiar a nuevas ramas
  • Para debugging moviéndote entre commits

Ejemplos prácticos:

git switch develop
Cambiar a una rama existente
git switch -c nueva-feature
Crear y cambiar a nueva rama
git switch --detach abc123
Moverse a un commit específico (detached HEAD)
git switch -
Volver a la rama anterior

Git Restore: El Recuperador de Archivos

REEMPLAZO MODERNO para git checkout cuando trabajas con archivos.

Cuándo usarlo:

  • Para descartar cambios en working directory
  • Para restaurar archivos desde staging area
  • Para recuperar archivos de commits anteriores

Ejemplos prácticos:

git restore archivo.js
Descarta cambios locales en un archivo
git restore .
Descarta cambios en todos los archivos
git restore --staged archivo.js
Saca archivo del staging area (mantiene cambios)
git restore --source abc123 -- archivo.js
Recupera versión de un commit específico
⚠️ Advertencia sobre detached HEAD: Al usar git switch --detach o git restore --source, puedes terminar en estado “detached HEAD”. Los commits que hagas aquí pueden perderse si no creas una rama:
git switch -c mi-rama-temporal

Git Reset: El Botón Nuclear

Modifica el historial moviendo la rama actual a un commit diferente.

⚠️ ADVERTENCIA CRÍTICA: NUNCA uses git reset --hard en ramas compartidas. Este comando elimina commits permanentemente y puede causar problemas graves en equipo.

Los 3 tipos de reset:

git reset --soft HEAD~1
Mueve HEAD pero mantiene cambios en staging
git reset HEAD~1
Mueve HEAD y deshace staging (–mixed por defecto)
git reset --hard HEAD~3
Mueve HEAD y ELIMINA todos los cambios

Recuperación después de reset –hard:

# Ver historial de acciones
git reflog

# Recuperar commit eliminado
git reset --hard abc123

Git Revert: El Deshacer Profesional

Crea un nuevo commit que deshace los cambios de commits anteriores, manteniendo el historial intacto.

Cuándo usarlo:

  • En trabajo en equipo
  • En producción
  • Cuando necesitas mantener el historial completo
  • Para deshacer cambios ya compartidos

Ejemplos prácticos:

git revert HEAD
Revertir el último commit
git revert abc123
Revertir commit específico
git revert --no-edit abc123
Revertir sin editar mensaje
git revert abc123..xyz789
Revertir múltiples commits

Comparación: ¿Cuándo usar cada uno?

Comando Propósito Modifica historial Seguro en equipo Riesgo
git switch Cambiar ramas No Bajo
git restore Recuperar archivos No Bajo
git reset --hard Eliminar commits No Alto
git revert Deshacer cambios No (añade commit) Bajo

Guía rápida de decisión

¿Quieres cambiar de rama? → Usa git switch

¿Quieres descartar cambios en archivos? → Usa git restore

¿Estás solo en rama local y quieres eliminar commits? → Usa git reset --hard

¿Estás en equipo o en producción? → Usa git revert

Flujo de trabajo moderno recomendado:

# En lugar de git checkout branch
git switch main

# En lugar de git checkout -b new-branch  
git switch -c nueva-rama

# En lugar de git checkout -- file
git restore archivo.js

# En lugar de git checkout commit-hash -- file
git restore --source abc123 -- archivo.js

Preguntas Frecuentes

¿Puedo recuperar commits después de git reset –hard?

Sí, usando git reflog. Git guarda referencia a los commits eliminados por un tiempo. Encuentra el hash del commit perdido y haz git reset --hard [hash].

¿Qué es el estado “detached HEAD”?

Es cuando HEAD apunta directamente a un commit en lugar de a una rama. Puedes ver y probar código, pero los commits que hagas no estarán en ninguna rama a menos que crees una nueva.

¿git revert puede causar conflictos?

Sí, si los cambios posteriores modificaron las mismas líneas de código. En ese caso, necesitarás resolver los conflictos manualmente antes de completar el revert.

¿Por qué debería usar git switch y git restore?

  • Más seguros: Comandos especializados con comportamientos predecibles
  • Más intuitivos: Los nombres describen claramente lo que hacen
  • Mejores mensajes de error: Ayudan a entender qué está pasando
  • Futuro-proof: git checkout podría volverse obsoleto
¿Te resultó útil esta guía moderna?
Compártela con tu equipo y evita el próximo desastre en Git.
Website |  + posts

Desarrollador web • Desarrollador de software· • Amante del diseño gráfico, diseño 2D/3D


🐙 Creando nuevo tema Wordpress en GitHub


🧪 Experimentos y pruebas varias en Serna Studio Lab

V.Serna

Desarrollador web • Desarrollador de software· • Amante del diseño gráfico, diseño 2D/3D 🐙 Creando nuevo tema Wordpress en GitHub 🧪 Experimentos y pruebas varias en Serna Studio Lab

Deja una respuesta