为什么" git推动起源@"不行?

时间:2014-08-09 05:20:31

标签: git alias git-push

我们可以像下面那样推动分支的负责人

$ git push origin HEAD

并且,我们可以将@用于HEAD的别名。

$ git show @

那么为什么下面的命令会给我一个错误?

$ git push origin @
fatal: remote part of refspec is not a valid name in @

1 个答案:

答案 0 :(得分:8)

虽然可以使用@来指定HEAD,但您首先需要将@解析为ref。 git push的语法采用refspec,在该上下文中,@被赋予两种不同的含义,其中只有一种是参考。

git push中refspec的语法是[+]<src>[:<dst>]+是可选的。 :<dst>是可选的,如果可以从<src>解析。

git push origin HEAD有效,因为HEAD被视为一种非常特殊的情况:HEAD通常是特定分支的符号引用,git push解析符号引用并选择<dst>基于指向的分支名称。

您还可以使用git symbolic-ref MYMASTER refs/heads/master,然后git push origin MYMASTER

git push origin HEAD~0失败,因为它转换为git push origin HEAD~0:HEAD~0,远程引用名HEAD~0无效,即使HEAD~0必须始终指定与{完全相同的提交{1}}。

HEAD失败,因为它转换为git push origin @,远程引用名git push origin @:@无效,即使@必须始终指定与{完全相同的提交{1}}。

如果您有一个名为@的远程分支,

HEAD几乎可以正常工作。这不是refspec只是git push origin @:HEAD的特殊情况,因此根据任何符号引用都无法解析HEAD

HEAD确实有用。