¿Qué es el Error 'Detached HEAD' en Git?
El estado detached HEAD (cabeza desacoplada) ocurre en Git cuando tu repositorio apunta directamente a un commit específico en lugar de hacerlo a una rama activa. Aunque no es estrictamente un error de código, puede generar confusión y miedo a perder los commits realizados si cambias de rama sin precaución.
Causas Principales del Estado Detached HEAD
Existen varias acciones comunes que provocan que tu repositorio caiga en este estado:
- Hacer checkout directamente a un hash de commit en lugar de a una rama (ej:
git checkout a1b2c3d). - Cambiar a una etiqueta (tag) específica para revisar una versión anterior del software.
- Descargar o apuntar a una referencia remota sin una rama local asociada.
Método 1: Crear una Rama Temporal para Salvar tus Cambios
Si has realizado nuevos commits mientras estabas en estado detached HEAD y no quieres perderlos, el método más seguro es crear una nueva rama a partir de tu posición actual.
- Ejecuta el siguiente comando para crear y cambiarte a una nueva rama temporal:
git checkout -b rama-temporal - Vuelve a tu rama principal o de trabajo habitual:
git checkout main - Fusiona los cambios de tu rama temporal si son correctos:
git merge rama-temporal
Método 2: Volver a la Rama Original y Descartar Cambios No Guardados
Si no has realizado ningún commit nuevo y solo estabas inspeccionando código antiguo, puedes regresar a tu rama de trabajo anterior de forma inmediata.
- Identifica tu rama anterior ejecutando:
git checkout main(reemplaza 'main' por el nombre de tu rama habitual). - Git te advertirá sobre los cambios pendientes. Si estás seguro de que no necesitas lo que estabas viendo, simplemente cambia de rama descartando el estado actual.
Método 3: Usar Git Reflog para Recuperar Commits Perdidos
Si cambiaste de rama por error y perdiste de vista los commits que hiciste en estado detached HEAD, el registro de referencia (reflog) es tu mejor aliado.
- Muestra el historial de movimientos de HEAD ejecutando:
git reflog - Localiza el hash del commit justo antes de perderte.
- Crea una rama nueva basada en ese punto exacto:
git checkout -b recuperacion [hash_del_commit]