“为什么?”;git push origin“;不工作?

“为什么?”;git push origin“;不工作?,git,alias,git-push,Git,Alias,Git Push,我们可以像下面这样推动树枝的头部 $ git push origin HEAD 而且,我们可以使用@作为头的别名 $ git show @ 那么为什么下面的命令会给我一个错误 $ git push origin @ fatal: remote part of refspec is not a valid name in @ 尽管可以使用@指定头部,但首先需要将@解析为ref。git push的语法采用refspec,在该上下文中,@具有两种不同的含义,其中只有一种是ref git push

我们可以像下面这样推动树枝的头部

$ git push origin HEAD
而且,我们可以使用
@
作为
头的别名

$ git show @
那么为什么下面的命令会给我一个错误

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

尽管可以使用
@
指定
头部
,但首先需要将
@
解析为ref。git push的语法采用refspec,在该上下文中,
@
具有两种不同的含义,其中只有一种是ref

git push
中refspec的语法是
[+][:]
<代码>+
是可选的<代码>:是可选的,如果它可以从
解析

git-push-origin-HEAD
起作用,因为
HEAD
被视为非常特殊的情况:
HEAD
通常是对特定分支的符号引用,
git-push
解析符号引用,并基于指向的分支名称选择

例如,您还可以有
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
必须始终指定与
HEAD
完全相同的提交

git-push-origin@
失败,因为它转换为
git-push-origin@
,并且远程引用名
@
无效,即使
@
必须始终指定与
完全相同的提交

git-push-origin@:HEAD
几乎可以工作,如果您有一个名为
HEAD
的远程分支。这不是refspec只是
HEAD
的特殊情况,因此这不会基于任何符号ref解析
HEAD


git-push-origin@:master
确实有效。

我猜是因为@映射到提交而不是头,所以它无法确定远程名称
git-push-origin@:master
应该可以工作。@eckes但是,
@
'应该被HEAD替换:你尝试了什么git版本,@sangdol。1.8.5中记录了一些“修复”RelNotes@VonC啊,好吧,从来没用过(我认为,
git-push-origin-HEAD
等同于带有push的
git-push-origin
。default=simple,因此不需要@case。@我用1.8.5.4试过的eckes。它在2.0.4上仍然不起作用。
git-push-origin
也不起作用。default=simple。谢谢你的解释。如果git-translates
@
HEAD
push
之前将
@
转换为
@
?它不可行吗?@Sangdol当然,它是可行的。如果所有操作都失败,它总是可以作为特例添加。这将与其他命令不一致,例如
git symbolical ref@
,在这些命令中它也不起作用当然,让它为git push工作并没有什么好处:大多数人根本不会键入任何refspec。所以我怀疑,如果考虑到它,它就没有必要了。