Git中的“at”@符号/符号/字符是什么意思?

时间:2013-07-28 15:58:58

标签: git

at-sign @经常在git中用于specify revisions 方法。例如,

  1. <ref>@{<date>}指定<date>上的州的引用。

    示例:git diff master@{yesterday} master

  2. <ref>@{<n>}特定于其 th 先前状态的引用。

    示例:git diff master@{1} master

  3. @{-<n>}指定先前检出的n th 分支 现在的。

    示例:git checkout @{-5}

  4. <ref>@{upstream}指定参考的上游分支。

    示例:git diff master@{upstream} master

  5. 但是@也在git命令中以其他方式使用,例如

    git rebase -i @~4
    git log @^^..@
    

    这些示例中的符号@是什么意思?

2 个答案:

答案 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问题:

  1. HEAD and ORIG_HEAD in Git
  2. What is git HEAD, exactly?
  3. 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 374fbaecommit e7f80eacommit 12a30a3Felipe 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 具有相同的语义。