¿Qué es el Error 'Detached HEAD' en Git?
El estado Detached HEAD (cabeza desacoplada) en Git ocurre cuando tu repositorio apunta directamente a un commit específico en lugar de a una rama activa (como main o master). Si realizas cambios en este estado y cambias de rama sin precaución, podrías perder tu progreso. Este es uno de los problemas más comunes al utilizar control de versiones en equipos de desarrollo.
Principales Causas del Estado Detached HEAD
Existen varias razones comunes por las cuales tu repositorio puede entrar en este estado:
- Hacer checkout directo a un hash de commit específico (ej.
git checkout a1b2c3d). - Cambiar a una etiqueta (tag) antigua para revisar una versión anterior del código.
- Descargar o apuntar a una rama remota de manera incorrecta sin crear una rama local de seguimiento.
Método 1: Crear una rama temporal para guardar los cambios
Si estás en estado Detached HEAD y has hecho commits nuevos que no quieres perder, la forma más segura de conservar tu trabajo es crear una nueva rama en ese mismo punto.
- Ejecuta el siguiente comando para crear y cambiarte a una nueva rama temporal:
git checkout -b mi-rama-recuperada - Verifica que tus cambios estén seguros listando las ramas:
git branch - Sube tu rama al repositorio remoto si es necesario:
git push origin mi-rama-recuperada
Método 2: Volver a la rama principal si no hay cambios importantes
Si entraste a un commit anterior solo para inspeccionar el código y no has realizado ningún commit nuevo que necesites conservar, la solución es simplemente regresar a tu rama de trabajo habitual.
- Asegúrate de descartar o guardar temporalmente cambios sin confirmar (stash) si los hubiera:
git stash - Vuelve a tu rama principal ejecutando:
git checkout main(o el nombre de tu rama, comomasterodevelop). - Tu repositorio volverá a su estado normal y conectado.
Método 3: Recuperar commits perdidos con Git Reflog
Si realizaste cambios, entraste en modo Detached HEAD, cambiaste de rama y perdiste de vista tus commits, Git guarda un registro histórico detallado de todas tus acciones recientes.
- Muestra el historial de movimientos de HEAD ejecutando:
git reflog - Identifica el hash del commit justo antes de perderte (aparecerá en la lista con un identificador como
HEAD@{index}). - Restaura ese estado creando una nueva rama desde ese punto exacto:
git checkout -b rama-recuperada [hash-del-commit]