Git: Cómo regresar del estado 'HEAD separado'

Resuelto James Raitsev asked hace 12 años • 9 respuestas

Si uno fuera a pagar una sucursal:

git checkout 760ac7e

Por ejemplo b9ac70b, ¿cómo se puede volver al último cabezal conocido b9ac70bsin conocer su SHA1?

James Raitsev avatar Aug 04 '12 01:08 James Raitsev
Aceptado

Si recuerda qué sucursal fue retirada antes (por ejemplo master), simplemente puede

git checkout master

para salir del estado HEAD separado .

En términos generales: git checkout <branchname>te sacará de eso.

Si no recuerda el último nombre de la sucursal, intente

git checkout -

Esto también intenta verificar su última sucursal registrada.

eckes avatar Aug 03 '2012 18:08 eckes

Úselo git reflogpara encontrar los hashes de confirmaciones desprotegidas anteriormente.

Un comando de acceso directo para llegar a la última rama registrada (aunque no estoy seguro si esto funciona correctamente con HEAD separado y confirmaciones intermedias) esgit checkout -

knittl avatar Aug 03 '2012 18:08 knittl

Es posible que haya realizado algunos compromisos nuevos en el detached HEADestado. Creo que si haces lo que aconsejan otras respuestas:

git checkout master
# or
git checkout -

¡Entonces puedes perder tus compromisos! En su lugar, es posible que quieras hacer esto:

# you are currently in detached HEAD state
git checkout -b commits-from-detached-head

y luego fusionarse commits-from-detached-headen la rama que desee, para no perder las confirmaciones.

 avatar Apr 28 '2020 20:04

Tuve este caso extremo, donde revisé una versión anterior del código en la que la estructura de mi directorio de archivos era diferente:

git checkout 1.87.1                                    
warning: unable to unlink web/sites/default/default.settings.php: Permission denied
... other warnings ...
Note: checking out '1.87.1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. 
Example:

  git checkout -b <new-branch-name>

HEAD is now at 50a7153d7... Merge branch 'hotfix/1.87.1'

En un caso como este, es posible que necesite usar --force (cuando sepa que volver a la rama original y descartar los cambios es algo seguro).

git checkout masterno funcionó:

$ git checkout master
error: The following untracked working tree files would be overwritten by checkout:
web/sites/default/default.settings.php
... other files ...

git checkout master --force(o git checkout master -f) trabajó:

git checkout master -f
Previous HEAD position was 50a7153d7... Merge branch 'hotfix/1.87.1'
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
mcaleaa avatar Apr 10 '2017 09:04 mcaleaa

En general: git checkout <branch*>( git checkout masteres un caso especial).

*del cual (accidentalmente) separamos una confirmación (usando git checkout <commit_hash>)

mirekphd avatar Mar 16 '2022 09:03 mirekphd