Detached HEAD en Git

Es posible que Git te haya mostrado alguna vez una advertencia del tipo «You are in ‘detached HEAD’ state» al intentar hacer un commit o un push. Lo que nos está diciendo Git es que el puntero HEAD está apuntando directamente a un commit, en lugar de apuntar a una rama que apunte al commit.

Para solucionarlo creamos una nueva rama temporal y hacemos que apunte al último commit haciendo un checkout de ella:

git branch tmp
git checkout tmp

Movemos el puntero de la rama master al de nuestra nueva rama temporal:

git branch -f master tmp
git checkout master

Borramos la rama temporal, que ya no es necesaria:

git branch -d tmp

Y ya podemos hacer el commit o el push tranquilamente:

git push origin master

7 comentarios en «Detached HEAD en Git»

  1. Hay muchos motivos por los que puedes llegar a un deatached HEAD y me da la sensación de que lo que hace es establecer que master apunte al commit actual donde estoy, cosa que puede ser correcto, o puede ser una modificacion del master inaceptable 🙁

    Por ejemplo, si yo quiero moverme a un commit antiguo para investigar alg (git checkout master~10) y luego se me olvida y me quedo en esa rama y hago cosas, estoy en un deatached HEAD, pero si la establezco como master, estarán desapareciendo 10 commits del repo, además de tener que hacer un push -f para poder subirlo al servidor.

    Creo que si lo que tienes es cambios, y los quieres llevar a master las opciones son:

    1. si no esta commiteado, git stash, git checkout master, git stash pop)

    2. si lo tienes comiteado, git log, apuntar los ids de los commits, git checkout master, git cherry-pick [ids de los commits].

      1. De todos modos no entiendo muy bien que flujo te lleva a un Deatached HEAD que se solucione así.

        Tienes algún ejemplo de esto? Creo que me ayudaría a entendererlo mejor.

  2. Muchas gracias, me sirvió mucho. Yo estoy nuevo en esto del control de versiones y hace poco tuve un pequeño gran inconveniente, trabajo desde el IDE de visual Studio, y tienen un plug in para trabajar en git, la cuestión es que desde hace unas semana hacia commit no en una rama, sino en el propio commit y pues estaba este mensaje a la cabeza, cuando por pruebas decido apuntar a una rama anterior, la rama donde supuestamente yo estaba trabajando ya no aparecia por ningún lado. Creí que moriria. Graciaa a Dios encontré la forma de volver a traer este commit a al head y encontré este tutorial para volver a poner orden a mi proyecto.

  3. pasa cuando haces cambio en propietario de archivos y pierde control sobre .git/HEAD y .git/FETCH_HEAD . y se realiza un commit con otro usuario sin esos privilegios, entonces git crea un head temporal y este no tiene punto ORIGIN quedando fuera para hacer un push o un pull. en una rama temporal.

    la otra es por hacer un git desde el proyecto con otro usuario y pasa lo mismo, cambia el propietario en mi caso root.
    y al hacer un commit con otro usuario noroot este pierde el origin head .git/HEAD y .git/FETCH_HEAD y se crea la rama temporal que no puede hacer merge con el master.

    git checkout -b temp //crear y cambiarte a la branch temp
    git mege master // mezcla los cambios de master en el temp
    (en caso de haber commits perdidos los trae)
    git checkout master //cambiamos al master
    git commit -m «full merge» //mezclamos el temp con el master por si quedo desactualizado algo.
    git push -f origin master // sube todo forzado

    eliminamos la branch temp git branch -d temp

Responder a Jesús Cancelar respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.