Solución:
Cualquier verificación de una confirmación que no sea el nombre de uno de tu Las ramas le darán una CABEZA separada. Un SHA1 que representa la punta de una rama todavía da una CABEZA separada. Solo una caja de una sucursal local nombre evita ese modo.
Ver comprometerse con un HEAD indiferente
Cuando HEAD se desconecta, las confirmaciones funcionan como de costumbre, excepto que no se actualiza ninguna rama con nombre. (Puede pensar en esto como una rama anónima).
Por ejemplo, si realiza el pago de una “sucursal remota” sin rastrearla primero, puede terminar con un HEAD separado.
Ver git: cambiar de rama sin separar la cabeza
Sentido: git checkout origin/main
(o origin/master
en los viejos tiempos) resultaría en:
Note: switching to 'origin/main'.
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 switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at a1b2c3d My commit message
Es por eso que no debes usar git checkout
más, pero el nuevo git switch
mando.
Con git switch
, el mismo intento de “pagar” (cambiar a) una sucursal remota fallaría inmediatamente:
git switch origin/main
fatal: a branch is expected, got remote branch 'origin/main'
Para agregar más sobre git switch
:
Con Git 2.23 (agosto de 2019), no tiene que usar el confuso git checkout
comando más.
git switch
también puede verificar una rama y obtener una HEAD separada, excepto:
- tiene un explícito
--detach
opción
Para comprobar el compromiso
HEAD~3
para una inspección temporal o un experimento sin crear una nueva rama:git switch --detach HEAD~3 HEAD is now at 9fc9555312 Merge branch 'cc/shared-index-permbits'
- no puede separar por error una rama de seguimiento remoto
Ver:
C:Usersvoncarepo>git checkout origin/master
Note: switching to 'origin/master'.
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 switching back to a branch.
Vs. usando el nuevo git switch
mando:
C:Usersvoncarepo>git switch origin/master
fatal: a branch is expected, got remote branch 'origin/master'
Si desea crear una nueva sucursal local rastreando una sucursal remota:
git switch <branch>
Si
<branch>
no se encuentra, pero existe una rama de seguimiento en exactamente un control remoto (llámelo<remote>
) con un nombre coincidente, tratar como equivalente agit switch -c <branch> --track <remote>/<branch>
¡No más errores!
¡No más CABEZAS desprendidas no deseadas!
Reproduje esto hace un momento por accidente:
-
enumera las ramas remotas
git branch -r origin/Feature/f1234 origin/master
-
Quiero pagar uno localmente, así que corté la pasta:
git checkout origin/Feature/f1234
-
¡Presto! Estado de HEAD separado
You are in 'detached HEAD' state. [...])
Solución # 1:
No incluye origin/
en la parte delantera de la especificación de mi rama al verificarlo:
git checkout Feature/f1234
Solución # 2:
Agregar -b
parámetro que crea una rama local desde el control remoto
git checkout -b origin/Feature/f1234
o
git checkout -b Feature/f1234
volverá al origen automáticamente
tratar
git reflog
esto le brinda un historial de cómo se movieron sus punteros HEAD y branch en el pasado.
p.ej :
88ea06b [email protected]{0}: pago: pasar de DESARROLLO a controles remotos / origin / SomeNiceFeature e47bf80 [email protected]{1}: desarrollo de origen de extracción: avance rápido
la parte superior de esta lista es una razón por la que uno podría encontrar un estado DETACHED HEAD … verificando una rama de seguimiento remoto.