Si Git muestra HEAD detached, tus archivos siguen estando en un commit concreto, pero los nuevos commits no harán avanzar una rama hasta que crees una. En un Mac, abre Terminal, ve al repositorio, comprueba si hay cambios sin confirmar y luego asocia tu trabajo actual a una nueva rama o regresa de forma segura a la rama que tenías intención de usar. El comando switch de Git admite ambas opciones. La guía de Terminal de Apple explica cómo abrir Terminal; la documentación de switch de Git detalla el comportamiento de las ramas y del estado de HEAD desacoplado.
1. Comprueba qué ha descargado Git
Abre Terminal desde Aplicaciones > Utilidades y, a continuación, accede a tu repositorio. Reemplaza la ruta de ejemplo por la carpeta donde reside tu proyecto; las comillas permiten espacios en la ruta. Terminal de macOS usa zsh de forma predeterminada, y estos comandos funcionan tanto en zsh como en las shells habituales.
cd "/path/to/your/repository"
git status
Si git status muestra “HEAD detached” o “not on any branch”, estás en estado de HEAD desacoplado. Git ha descargado directamente un commit en lugar de una rama. El commit y los archivos de trabajo siguen estando disponibles; el riesgo reside en que los commits que hagas aquí no se asocian automáticamente a una rama. El manual de checkout de Git describe este estado y cómo una rama puede conservar los commits realizados en él.
Antes de cambiar a cualquier otro sitio, lee el resto de la salida de git status. Si lista archivos modificados o sin seguimiento (untracked), se trata de cambios que aún no se han confirmado. Puedes seguir trabajando en ese mismo punto o crear una rama ahora; crear una rama en el commit actual no descarta por sí mismo los cambios. Evita opciones de forzado o descarte mientras realizas la recuperación.
2. Mantén el trabajo actual en una rama
Si hiciste un commit mientras estabas desacoplado —o deseas seguir trabajando a partir de esta instantánea exacta—, crea una rama en el punto en el que estás ahora:
git switch -c recovered-work
git status
Utiliza un nombre de rama descriptivo en lugar de recovered-work. Git crea la rama en el commit actual y cambia a ella, de modo que los commits posteriores pertenecerán a esa rama. Confirma que git status ahora indique el nombre de la rama. Esta es la forma más rápida de recuperación cuando la instantánea desacoplada contiene el trabajo que deseas conservar. Git documenta switch -c como la creación y el cambio a una rama.
Si tienes cambios sin confirmar, estos normalmente permanecerán en el árbol de trabajo al crear la rama. Revisa git status después para verificar que sigan presentes. Si el comando genera un error porque ya existe una rama con ese nombre, elige un nombre diferente; no añadas -C, ya que puede restablecer una rama existente a un nuevo punto de partida.
3. Regresa a la rama que tenías intención de usar
Si solo estabas inspeccionando un commit y no tienes cambios que conservar, cambia a la rama deseada indicando su nombre. Por ejemplo:
git switch main
Usa el nombre real de la rama en tu repositorio si no es main. Si Git avisa de que se sobrescribirían cambios locales, detente y consérvalos primero: crea una rama de recuperación como se explicó anteriormente o haz un commit con el trabajo. Git normalmente bloquea el cambio de rama si este implicara perder modificaciones locales; evita --discard-changes durante la recuperación, ya que restablece el índice y el árbol de trabajo para que coincidan con la rama de destino. El manual de git switch explica estas protecciones y opciones.
Si acabas de salir de una rama por error, git switch - te devuelve a la rama o commit anterior registrado por el historial de cambios recientes de Git. Revisa git status después del cambio para confirmar dónde te encuentras.
4. Encuentra un commit desacoplado que dejaste atrás antes
Si ya te habías cambiado de rama y no recuerdas dónde quedó tu commit desacoplado, inspecciona el reflog local:
git reflog
El reflog registra las actualizaciones recientes de referencias locales, y el reflog de HEAD también guarda los cambios de rama. Busca una entrada con un mensaje de commit o una marca de tiempo que coincida con tu trabajo. Para inspeccionar un commit candidato sin modificar nada, copia su identificador corto desde el reflog y ejecuta:
git show --stat COMMIT_ID
Sustituye COMMIT_ID por el ID real; no escribas el marcador de posición de forma literal. Si se trata del commit correcto, consérvalo creando una rama en ese commit:
git switch -c recovered-work COMMIT_ID
Esto hace que el commit vuelva a ser accesible mediante una rama. Los reflogs son registros locales y sus entradas pueden expirar; la documentación de Git los describe como registros de actualizaciones de referencias recientes y detalla su comportamiento de expiración. Consulta git reflog.
5. Verifica antes de continuar
Ejecuta git status y git log -1 --oneline para confirmar la rama actual y el último commit. Si tu trabajo no estaba confirmado, comprueba que sus archivos sigan apareciendo en la salida del estado. Si no aparece ningún candidato en el reflog, la recuperación puede requerir examinar objetos huérfanos (dangling objects); ese es un paso independiente y más delicado, y debes evitar ejecutar comandos de limpieza como git gc mientras buscas.
Un HEAD desacoplado no significa que tu trabajo haya desaparecido. La forma adecuada de recuperarlo depende de si necesitas conservar el commit actual, regresar a una rama existente o localizar un commit tras haber cambiado de rama. Una rama creada en el commit correcto le proporciona a Git una referencia con nombre que podrá seguir mientras continúas.
Fuentes
Abrir o salir de Terminal en el Mac — Soporte técnico de Apple