Git日志别名-致命:模糊参数'%ad':未知修订或路径


10

我正在尝试使用Git Immersion的日志别名:

[alias]
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

但是Git回应

fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

使用v1.6.1。到目前为止,我所做的只是在master上进行两次提交,然后在分支上进行一次提交。这个别名在其他地方对我有用,这台特定的机器可能是什么问题?

编辑-根据下面的lesmana的建议,我能够确定在将行粘贴到PuTTY中后以某种方式消除了引号上的反斜杠。使用"而不是时出现上述错误\"

Answers:


17

这是错误消息的来源:

$ git log %ad
fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

您将从以下两个命令中获得相同的错误消息:

$ git log --pretty=format:%h %ad | %s%d [%an] --graph --date=short
$ git log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

问题在于,它git log接收到以下两个参数:(--pretty=format:%h--pretty=format:\"%h)和%ad。其余的,至少当直接作为bash中的命令直接执行时,是命令的管道%s%d,通常不存在。因此,我系统上的完整错误消息如下所示:

$ git log --pretty=format:%h %ad | %s%d [%an] --graph --date=short
bash: %s%d: command not found
fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

所有这一切都表明该报价丢失了,%ad并被解释为git log的参数。为避免这种情况,您必须找到正确的引号和转义组合,以便在执行时正确引用格式字符串。

关于别名和引用的git config 手册

参数由空格分隔,支持通常的shell引用和转义。引号对和反斜杠可用于引用它们。

从这一行,我无法弄清楚引号和转义的工作方式。我在别名中尝试了一些引号和转义的组合,但没有任何意义。

您在问题中发布的以下几行在我的系统上运行正常:

[alias]
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

您将不得不尝试在使用PuTTY和所有功能时在系统上获得正确的组合。


1
您有与此相关的文档吗?至少对我来说是相反的。
韦斯

@wes:添加了指向文档的链接。重写答案。
lesmana 2011年

5
我必须用单引号替换双引号,以便在OSX下使用git 1.7.5.1进行以下工作:[alias] lg = log --graph --pretty='format:%C(yellow)%h %Creset%s%Cred%d'
user229044 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.