Git Switch vs Restore vs Reset vs Revert
Domina los comandos modernos de Git para deshacer cambios sin romper tu repositorio.
¿Por qué necesitas dominar estos comandos?
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 developCambiar a una rama existente
git switch -c nueva-featureCrear y cambiar a nueva rama
git switch --detach abc123Moverse 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.jsDescarta cambios locales en un archivo
git restore .Descarta cambios en todos los archivos
git restore --staged archivo.jsSaca archivo del staging area (mantiene cambios)
git restore --source abc123 -- archivo.jsRecupera versión de un commit específico
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-temporalGit Reset: El Botón Nuclear
Modifica el historial moviendo la rama actual a un commit diferente.
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~1Mueve HEAD pero mantiene cambios en staging
git reset HEAD~1Mueve HEAD y deshace staging (–mixed por defecto)
git reset --hard HEAD~3Mueve 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 HEADRevertir el último commit
git revert abc123Revertir commit específico
git revert --no-edit abc123Revertir sin editar mensaje
git revert abc123..xyz789Revertir múltiples commits
Comparación: ¿Cuándo usar cada uno?
| Comando | Propósito | Modifica historial | Seguro en equipo | Riesgo |
|---|---|---|---|---|
git switch |
Cambiar ramas | No | Sí | Bajo |
git restore |
Recuperar archivos | No | Sí | Bajo |
git reset --hard |
Eliminar commits | Sí | No | Alto |
git revert |
Deshacer cambios | No (añade commit) | Sí | 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
Compártela con tu equipo y evita el próximo desastre en Git.
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