at-sign @
经常在git中用于specify revisions
方法。例如,
<ref>@{<date>}
指定<date>
上的州的引用。
示例:git diff master@{yesterday} master
。
<ref>@{<n>}
特定于其 th 先前状态的引用。
示例:git diff master@{1} master
。
@{-<n>}
指定先前检出的n th 分支
现在的。
示例:git checkout @{-5}
。
<ref>@{upstream}
指定参考的上游分支。
示例:git diff master@{upstream} master
。
但是,@
也在git命令中以其他方式使用,例如
git rebase -i @~4
git log @^^..@
这些示例中的符号@
是什么意思?
答案 0 :(得分:38)
As of Git version 1.8.5,at-sign @
,没有前导分支/引用名称和序号{n}
后缀,如HEAD@{1}
和master@{1}
,只是一个特殊Git参考HEAD
的同义词/别名/快捷方式:
现在可以说“@”,而不是输入四个大写字母“HEAD”,例如“git log @”。
所以对于这些命令
git rebase -i @~4
git log @^^..@
您可以简单地将@
的第一次替换为HEAD
(如果使用的是Windows或OS X,则替换为head
)
git rebase -i HEAD~4
git log HEAD^^..HEAD
那么HEAD
意味着什么?正如official Linux Kernel Git documentation for specifying Git revisions所解释的那样,HEAD
是您目前已作为工作副本签出的提交的特殊快捷方式引用(或者在Git术语中,您的“工作树”):
HEAD命名您在工作树中基于更改的提交。
您还可以阅读有关特殊参考HEAD
的含义的其他Stack Overflow问题:
VonC还发现了有关@
被选为this Stack Overflow answer (the last section at the bottom)中head
的快捷方式的有趣信息。
答案 1 :(得分:1)
虽然自 Git 1.8.5(2013 年第 3 季度)以来 @
的意思确实是 HEAD
,但它...并不总是工作,在 Git 2.30 之前也不行( 2021 年第一季度),
"@
" 有时有效(例如,"git push origin @:there
作为 refspec 元素的一部分,但 "git push origin @
" 没有不起作用,这已经更正。
请参阅 commit 374fbae 的 commit e7f80ea、commit 12a30a3、Felipe Contreras (felipec
)(2020 年 11 月 25 日)。
(由 Junio C Hamano -- gitster
-- 于 commit c59b73b 合并,2020 年 12 月 14 日)
refspec
:使 @
成为 HEAD
签字人:Felipe Contreras
<块引用>由于 commit 9ba89f484e Git 学会了如何使用源 @
推送到远程分支,例如:
git push origin @:master
但是,如果缺少右侧,则推送失败:
git push origin @
很明显想要的行为是什么,允许推送使事情更加一致。
此外,@:master
现在与 HEAD:master
具有相同的语义。