git如何解释后跟路径的冒号?

git如何解释后跟路径的冒号?,git,Git,我在玩弄一种通过提交消息引用提交的语法,然后出现了以下错误: $ git show :/A fatal: ambiguous argument ':/A': both revision and filename Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]' $git show:/A 致命:参数“:/A”不

我在玩弄一种通过提交消息引用提交的语法,然后出现了以下错误:

$ git show :/A
fatal: ambiguous argument ':/A': both revision and filename
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
$git show:/A
致命:参数“:/A”不明确:修订版和文件名
使用“---”将路径与修订分开,如下所示:
'吉特[…]-[…]'

这个错误消息非常清楚如何解决它,但我还没有找到任何文档来解释git如何解释后跟路径的冒号。仅当后跟分支名称时
您能给我一些参考资料来了解更多信息吗?

这实际上比您预期的要复杂一些,因为
:/a
可能是三件事

Git文档中有多个不同的部分谈到了这一点,但主要有两个地方可以看:

  • 描述当某个内容是修订说明符时,前缀如何工作
  • 定义
    -当某个东西是pathspec时前缀的工作方式
当它只是一个文件名时,
:/a
仅表示名为
:/a
的文件

作为路径规范,
:/a
使用“魔术签名”字符
/
,不终止
,以及名称
a
,因此它指的是根目录(存储库或工作树的)中名为
a
的文件,而不是当前目录中的文件
:/a

作为修订说明符,
:/a
搜索提交消息,并且
a
成为正则表达式(尽管在本例中它是一个与字母
a
匹配的普通正则表达式):

。。。此名称返回可从任何引用(包括HEAD)访问的最年轻匹配提交

使用
--
您将强制Git将其视为pathspec,您可能希望在前面添加
:(文字)
,以防止其被解释。

您说的“无终止:”是什么意思?我不明白“:”在pathspec中做什么pathspec部分说以冒号开头的pathspec有特殊的含义。在缩写形式中,前导冒号:后跟零个或多个“魔术签名”字母(可选地以另一个冒号结尾
)。。。因此,
:/:
有一个可选的终止冒号。它接着说:在长格式中,前导冒号
后面是一个开括号
,一个由零个或多个“神奇单词”组成的逗号分隔列表,以及一个闭括号
,其余的是与路径匹配的模式。我被这一点绊倒了,在记住没有可选的终止冒号之前,我写了,例如,
:(顶部,icase):path/name
,因此它尝试匹配
/:path/name
忽略大小写,而不是匹配
path/name
忽略大小写。