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

Deja un comentario