Podemos empujar la cabeza de una twig como a continuación
$ git push origin HEAD
Y, podemos usar @
para alias de HEAD
.
$ git show @
Entonces, ¿por qué el siguiente command me da un error?
$ git push origin @ fatal: remote part of refspec is not a valid name in @
Aunque @
se puede usar para especificar HEAD
, primero necesita @
para analizarse como una reference. La syntax para git push
toma un refspec, y en ese context, @
tiene dos significados diferentes, de los cuales solo uno es ref.
La syntax para un refspec en git push
es [+]<src>[:<dst>]
. +
es opcional. :<dst>
es opcional si se puede resolver desde <src>
.
git push origin HEAD
funciona, porque HEAD
se trata como un caso muy especial: HEAD
es normalmente una reference simbólica a una twig específica, y git push
resuelve references simbólicas y selecciona <dst>
function del nombre de la twig apuntada.
También puede tener, por ejemplo, git symbolic-ref MYMASTER refs/heads/master
, seguido de git push origin MYMASTER
.
git push origin HEAD~0
falla, porque se traduce en git push origin HEAD~0:HEAD~0
, y un renombre remoto HEAD~0
no es válido, aunque HEAD~0
necesariamente siempre especificará la misma confirmación que HEAD
.
git push origin @
falla, porque se traduce a git push origin @:@
, y una reference remota @
no es válida, aunque @
necesariamente siempre especificará la misma confirmación que HEAD
.
git push origin @:HEAD
casi funcionaría, si tienes una twig remota llamada HEAD
. Este no es el caso especial donde el refspec es simplemente HEAD
, por lo que esto no resuelve HEAD
function de cualquier reference simbólica.
git push origin @:master
funciona.