Detached HEAD en Git: conserva tus commits
Los bloques son casos distintos, no un único script. Elige el que encaja con tu repositorio. Sustituye ramas, rutas y VERIFIED_COMMIT antes de usarlos. Los comandos de cancelación solo corresponden a su operación activa; no ejecutes ambas alternativas.
Respuesta breve
Detached HEAD significa que HEAD apunta directamente a un commit, en lugar de seguir una rama local. Puedes inspeccionar, compilar y hacer commits. Para conservar trabajo nuevo, crea una rama en el commit actual antes de salir. El checkout separado no implica pérdida por sí mismo; el riesgo aparece al dejar commits nuevos sin una referencia duradera.
Ejemplo y condiciones
El ejemplo parte de un checkout temporal de una versión anterior y dos commits que se conservarán en una rama de corrección. Es distinto de un rebase activo o del checkout de un submódulo, que puede estar separado intencionalmente. Lee status y termina o cancela deliberadamente cualquier operación activa antes de aplicar esta guía.
Inspecciona antes de cambiar
En el caso separado normal, branch --show-current no imprime un nombre. Status explica el estado y log muestra el historial actual. Anota el ID de HEAD. Una salida vacía no significa que el repositorio carezca de ramas ni que sus archivos estén sin seguimiento: la referencia y el contenido del árbol responden preguntas diferentes.
git status
git branch --show-current
git log -3 --oneline
git rev-parse HEADConserva una referencia o checkout separado
Crea rescue/detached con switch -c mientras estás en el commit deseado. La nueva rama conserva ese commit y sus antecesores accesibles. No convierte cambios sin preparar en un commit: revísalos y guárdalos aparte si procede. Usa un nombre nuevo, sin reemplazar otra rama mediante opciones de fuerza.
git switch -c rescue/detached
git branch --show-currentPrimer flujo
Comprueba la rama actual, los commits y el patch después de crearla. Puedes seguir trabajando allí o integrar la corrección mediante merge o cherry-pick. Cherry-pick copia un cambio en un commit nuevo; merge une historiales. Elige según la tarea y revisa el resultado. Salir de detached HEAD no exige un push automático.
git log -3 --oneline --decorate
git show --stat HEADElige deliberadamente la otra opción
Si ya saliste, inspecciona el reflog local y cada candidato con show. Elige por su patch y su padre, y crea rescue/recovered en el ID verificado. VERIFIED_COMMIT es un marcador que debes sustituir. HEAD@{1} no siempre es el commit perdido: otras operaciones pueden cambiar cuál es la entrada pertinente.
git reflog --date=iso
git show VERIFIED_COMMIT
git branch rescue/recovered VERIFIED_COMMITLímites y excepciones
Reflog registra movimientos locales de referencias; no es un archivo remoto. Sus entradas y los objetos inalcanzables pueden caducar o eliminarse. Los cambios sin commit nunca se registraron como commits en reflog. Para archivos no guardados, busca una copia anterior, como un respaldo del editor o un stash comprobado, sin prometer su reconstrucción mediante reflog.
Conflictos y limpieza
Un submódulo suele estar en detached HEAD para consumir el commit fijado por el repositorio padre. Es normal si solo usas esa dependencia. Para desarrollar el repositorio hijo, crea su propia rama allí y sigue su flujo de contribución. Una rama del padre no da automáticamente nombre a commits del hijo: son historiales separados.
Verifica el resultado
Antes de eliminar la rama de rescate, verifica que otra rama duradera o un merge revisado conserva los commits deseados. Comprueba estado y patch en el destino y mantiene la referencia durante la revisión. Un nombre de rama conserva historial confirmado; no es una segunda copia física de todos los archivos ni una prueba de que el arreglo pasa tests.
git log --oneline --decorate rescue/detached
git status --shortPreguntas habituales
¿Es un error? No cuando inspeccionas deliberadamente un commit, tag o submódulo fijado. ¿Puedo hacer commits? Sí, pero da nombre a ese historial antes de salir. ¿Recuperar después? A veces, si aún existen los objetos y la evidencia local; revisa candidatos sin prometer retención permanente.
Revisa la operación en FluxGit
Usa el historial visual y la vista de cambios de FluxGit para revisar la operación y los commits pertinentes. Conserva las comprobaciones de rama, historial compartido y archivos locales del ejemplo. La página de descarga muestra las versiones y plataformas disponibles.