git show HEAD ^似乎不起作用.这是正常的吗?

nol*_*oli 22 git bash zsh

我正在使用Zsh并尝试为项目运行git show以查看我的修订历史记录.如果我做

git show HEAD
Run Code Online (Sandbox Code Playgroud)

它工作正常,显示我上次提交,但以下命令不起作用

[master?5?]:~/project $ git show HEAD^ 
zsh: no matches found: HEAD^
[master?5?]:~/project $ git show HEAD^^
zsh: no matches found: HEAD^^
Run Code Online (Sandbox Code Playgroud)

但这确实有效

git HEAD~1
Run Code Online (Sandbox Code Playgroud)

我在这里做错了git show HEAD^^吗?

git版本1.7.4.5

Chr*_*her 37

而不是转义或引用插入符号,你可以告诉zsh当它无法匹配glob模式时停止对命令的诅咒.把这个选项放在你的.zshrc:

setopt NO_NOMATCH 
Run Code Online (Sandbox Code Playgroud)

zsh如果glob-matching失败,该选项将停止中止命令.git show HEAD^将正常工作,你不必逃脱插入符号.此外,globbing和^ 事件指示符仍将以您期望的方式工作.

要在评论中回答dolzenko的问题,你可以通过禁用扩展的globbing 来获得git log ^production master(也就是巧合,也就是git的'双点'语法所做的git log production..master:):

setopt NO_EXTENDED_GLOB
Run Code Online (Sandbox Code Playgroud)

当然,你可能实际上依赖于扩展的globbing并且不知道它.我建议在禁用之前阅读它的功能.


Joh*_*web 30

carat(^)在Bash和Zsh中有特殊含义.

你需要逃避它或引用它:

% git show HEAD\^

% git show 'HEAD^^'
Run Code Online (Sandbox Code Playgroud)

  • (但老实说,在大多数情况下,使用`~`语法更容易,除非你需要的不是第一个父母.) (11认同)

mb1*_*b14 8

你也可以使用noglob.

% noglob git show HEAD^ 
Run Code Online (Sandbox Code Playgroud)

(或别名noglob git)