大约一年前,这种方法还管用。但现在不行了:
git log --abbrev=6
预期结果是所有提交哈希都缩写为 6 个字符。
实际结果现在是此错误消息:
致命错误:参数“6”不明确:未知修订或路径不在工作树中。
使用“--”将路径与修订分开,如下所示:
“git [...] -- [...]”
我的印象是 Git 甚至不知道该参数并试图默默地忽略它的名称但不忽略其值。
在 Windows 7 上使用 Git 1.8.1.msysgit.1。
添加:哦,其他参数也失败了。整个命令是:
git log --abbrev=6 --format=format:"----- Commit %%h on %%ci by %%an -----%%n%%n%%B"
如果我省略缩写部分,它仍然会返回另一个错误:
致命:对象名称‘格式’无效。
答案1
以上两种方法对我来说都没有失败,但它们也不起作用,至少对我在 Mac/Unix 上来说不是。
第一个错误被抛出是因为 Git 正在解析你的语句,好像--abbrev
是一个一元标志(即不接受参数)并且6
是一个单一对象引用(例如分支名称、SHA 等)。例如:
git log --abbrev GITREF # Like branch or tag '6'
它似乎对format
关键字做了同样的事情。
我的猜测是以下之一:
- Windows 终端仿真器中的命令行解析明显不符合 UNIX 风格,导致选项严重混乱
- 你的 Git 版本中有一个 bug,但它并不影响基础代码,因此没有出现在主要的 Git 发行说明中(我检查过了……)
- 处理方式可能发生的变化
--abbrev
在发行说明中被省略了(我再次检查了......)
只是出于好奇,请让我知道以下任何一种方法是否有效(注意:我删除了百分号的重复项。那是 Windows 的事情吗?):
git log --format=format:'----- Commit %h on %ci by %an -----%n%n%B' --abbrev=6
git log --format=format:'----- Commit %h on %ci by %an -----%n%n%B' --abbrev-commit
git log --pretty=format:'----- Commit %h on %ci by %an -----%n%n%B' --abbrev=6
git log --pretty=format:'----- Commit %h on %ci by %an -----%n%n%B' --abbrev-commit