Solución: Git detached HEAD — cómo salir sin perder los commits
Git te avisa de que estás en 'detached HEAD' y cualquier commit que hagas puede perderse. Qué significa, cómo llegaste aquí y cómo volver a una rama de forma segura.
¿Por qué ocurre?
HEAD normalmente apunta a una rama (ej: main). En estado 'detached HEAD', HEAD apunta directamente a un commit específico, no a ninguna rama. Ocurre al hacer `git checkout <hash>`, `git checkout <tag>`, o al explorar el historial. Los commits que hagas en este estado no pertenecen a ninguna rama y Git los puede eliminar con el garbage collector.
Solución paso a paso
Opción A — Volver a la rama principal sin guardar nada:
# Si no hiciste commits en detached HEAD y solo quieres volver
git checkout main
# o
git switch main
Opción B — Guardar el trabajo en una rama nueva:
# Si hiciste commits en detached HEAD y quieres conservarlos
git switch -c mi-rama-nueva
# Equivalente a:
git checkout -b mi-rama-nueva# Ahora tu trabajo está seguro en 'mi-rama-nueva'
# Puedes fusionarla a main cuando quieras:
git switch main
git merge mi-rama-nueva
Opción C — Aplicar los commits de detached HEAD a main:
# Anota el hash del commit que quieres conservar
git log --oneline # copia el hash, ej: a1b2c3d# Vuelve a main
git switch main
# Cherry-pick del commit
git cherry-pick a1b2c3d
Cómo comprobar en qué estado estás:
git status
# "HEAD detached at a1b2c3d" → en detached HEAD
# "On branch main" → en una rama normalgit branch
# El asterisco (*) sin nombre de rama confirma detached HEAD
Caso común — explorar una versión antigua y volver:
# Explorar un commit antiguo (esto te mete en detached HEAD)
git checkout abc1234# Cuando termines de explorar, vuelve a la rama
git switch - # vuelve a la rama anterior
# o
git switch main
Cómo evitarlo en el futuro
Usa `git switch` en lugar de `git checkout` para cambiar de rama — es más explícito y avisa mejor del estado. Si quieres explorar un commit antiguo sin riesgo, crea una rama primero: `git switch -c explorar-version-antigua abc1234`.
¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:
Generador de Prompts