GIT: ¿Cómo hacer reference inequívoca a HEAD actual al tener una twig llamada HEAD?

Aunque "HEAD" es definitivamente una mala elección para el nombre de una sucursal de Git, sigue siendo un nombre de sucursal válido. Si tiene una twig llamada "HEAD", ¿hay alguna manera de referirse inequívocamente a la reference simbólica HEAD real?

La twig se puede referencer como refs/heads/HEAD , pero ¿qué pasa con HEAD ?

El uso de solo los resultados de HEAD en un refname 'HEAD' is ambiguous error refname 'HEAD' is ambiguous cualquier lugar donde se pasa un <commit> como argumento.

Según gitrevisions , si existen HEAD y refs/heads/HEAD , la revisión seleccionada es HEAD (es decir, no la twig llamada HEAD ).

Esta es, de hecho, la respuesta correcta para la mayoría de las situaciones, pero git checkout prefiere el nombre de la sucursal a la revisión, por lo que git checkout HEAD resuelve en la bifurcación, en lugar de la confirmación actual.

Hay otros commands que también eligen el nombre de la twig, por ejemplo, git branch -f HEAD newrev o git branch -D HEAD refiere a la twig, pero aquí no hay espacio real para la ambigüedad: la git branch obviamente va a funcionar en la twig.

Otros manejadores generalmente pasan un nombre de twig o un especificador de revisión a git rev-parse o git rev-list , y se comportan como se documenta en gitrevisions .

Tenga en count que pueden ocurrir casos similares con nombres de twig más realists. Ayer mismo creé una twig para tratar con ciertos elementos de ethernet, y e1000 la twig e1000 … que parece una SHA-1 abreviada. Una twig llamada facade sufre el mismo destino.

Puede usar use $(git rev-parse --quiet HEAD) siempre que necesite la confirmación (o $(git symbolic-ref HEAD) si quiere saber a qué HEAD "apunta").

De acuerdo con la git help rev-parse $GIT_DIR/<refname> tiene prioridad sobre refs/HEAD , refs/tags/HEAD , refs/heads/HEAD , etc., y --quiet silenciará el "refname 'HEAD' es ambigua "advertencia.

En cualquier lugar que tome una reference , debería poder usar HEAD para referirse a la "cosa" actualmente revisada y refs/heads/HEAD para referirse a una twig llamada HEAD . Si encuentra un lugar en Git que toma una ref (no una sucursal) y HEAD no funciona, debe informarlo como un error.