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

37 git

at-sign @通常在git中用于以不同方式指定修订.例如,

  1. <ref>@{<date>}指定其状态的引用<date>.

    示例:git diff master@{yesterday} master.

  2. <ref>@{<n>}特定于第n 先前状态的参考.

    示例:git diff master@{1} master.

  3. @{-<n>}指定当前之前检出的第n 分支.

    示例:git checkout @{-5}.

  4. <ref>@{upstream} 指定引用的上游分支.

    示例:git diff master@{upstream} master.

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

git rebase -i @~4
git log @^^..@
Run Code Online (Sandbox Code Playgroud)

@在这些例子中,at-sign 意味着什么?

小智 43

从Git版本1.8.5开始,at-sign @没有前导分支/引用名称和ordinal {n}后缀,如HEAD@{1}master@{1},只是特殊Git引用的同义词/别名/快捷方式HEAD:

现在可以说"@",而不是输入四个大写字母"HEAD",例如"git log @".

所以对于这些命令

git rebase -i @~4
git log @^^..@
Run Code Online (Sandbox Code Playgroud)

你可以简单地替代第一的发生@HEAD(或head如果使用Windows或OS X)

git rebase -i HEAD~4
git log HEAD^^..HEAD
Run Code Online (Sandbox Code Playgroud)

HEAD意味着什么?正如用于指定Git修订版官方Linux Kernel Git文档所解释的那样,HEAD是一个特殊的快捷方式引用,用于您当前已作为工作副本签出的提交(或者在Git术语中,您的"工作树"):

HEAD命名您基于工作树中的更改的提交.

您还可以阅读有关特殊参考HEAD含义的其他Stack Overflow问题:

  1. GIT中的HEAD和ORIG_HEAD.
  2. 什么是git HEAD,究竟是什么?.

VonC还发现为什么有趣的信息@被选择作为一个快捷方式head这个堆栈溢出的答案(在底部的最后一节).

  • 您甚至可以将“ @@ {1}”用作“ HEAD @ {1}”的快捷方式 (3认同)
  • `HEAD` 和 `@` 不能完全互换,例如,在分支上时,`git push origin @:new-branch` 因引用不明确而失败,而 `git push origin HEAD:new-branch` 则有效。 (2认同)