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

Comentarios
  1. Jesús

    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].

    Responder

    • Cierto, tienes razón. Quizás la entrada es demasiado simplista

      Responder

      • Jesús

        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.

        Responder

  2. Luis Geovanni

    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.

    Responder

Deja un comentario