Cualquier pago de un commit que no sea el nombre de una de sus sucursales le dará un HEAD separado. Un SHA1 que representa la punta de una rama todavía da una CABEZA separada. Solo el pago de un nombre de sucursal local evita ese modo.
Ver comprometerse con una CABEZA separada
Cuando HEAD está desconectado, los commits funcionan de manera normal, excepto que no se actualiza ninguna rama con nombre. (Puedes pensar en esto como una rama anónima).
Por ejemplo, si desprotege una "rama remota" sin rastrearla primero, puede terminar con un HEAD separado.
Ver git: cambiar de rama sin separar la cabeza
Con Git 2.23 (agosto de 2019), ya no tiene que usar el comando confusogit checkout
.
git switch
también puede pagar una rama y obtener un HEAD de separación, excepto:
- tiene una
--detach
opción explícita
Para verificar el compromiso HEAD~3
de inspección temporal o experimento sin crear una nueva sucursal:
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 remota
Ver:
C:\Users\vonc\arepo>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
comando:
C:\Users\vonc\arepo>git switch origin/master
fatal: a branch is expected, got remote branch 'origin/master'
Si desea crear una nueva sucursal local que rastrea 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, trate como equivalente a
git switch -c <branch> --track <remote>/<branch>
¡No más errores!
¡No más CABEZA separada no deseada!
branch-name@{n}
, la enésima posición anterior debranch-name
. Pero no importa qué, en algún momento debe haber habido ungit checkout <rev>
. Si eso no suena, entonces probablemente hiciste lo que Will mencionó: trató de hacergit checkout <file>
y logró especificar una revisión por accidente.