git - zsh shell 无法识别 git HEAD^

标签 git zsh

我正在使用 zsh shell 和 prezto 以及 cygwin。当我输入这个 git 命令时:

git reset HEAD5

zsh 返回:

zsh: no matches found: HEAD^

但是当我切换到使用 bash shell 时,它就可以工作了。

当我尝试使用 HEAD^ 时,为什么 zsh 会抛出错误?

最佳答案

在 zsh 中,^ 字符在文件名扩展中被视为特殊字符,但前提是设置了 EXTENDED_GLOB 选项:

zsh% setopt noEXTENDED_GLOB
zsh% echo HEAD^
HEAD^
zsh% setopt EXTENDED_GLOB
zsh% echo HEAD^
zsh: no matches found: HEAD^
zsh% 

Bash没有这个功能。 (准确地说,bash 确实具有扩展的 glob 功能,由 shopt -s extglob 启用,但 bash 的扩展 glob 语法并不将 ^ 字符视为特殊字符。)

启用此功能后,^ 是一个类似于 * 的特殊字符,但含义不同。与 * 一样,您可以通过转义来抑制其特殊含义,方法是将其括在单引号或双引号中,或者在其前面添加反斜杠。引用是最简单的解决方案。

而不是

git reset HEAD^

试试这个:

git reset 'HEAD^'

^ 通配符的含义并不相关,因为您所需要做的就是避免使用它,但无论如何我都会提到它。根据 zsh 手册,^X 匹配除模式 X 之外的任何内容。对于 HEAD^ 的情况,^ 后面没有任何内容 - 这意味着 HEAD^HEAD 匹配,后跟除了什么都没有之外的任何东西。这是一种迂回的说法,HEAD^ 匹配以 HEAD 开头并后跟一些非空字符串的文件名。给定文件 HEADHEAD1HEAD2,模式 HEAD^HEAD1 匹配和HEAD2

关于git - zsh shell 无法识别 git HEAD^,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26292192/

相关文章:

macos - 在 OSX 上将 shell 从 Bash 更改为 Zsh 时找不到 Java_HOME?

cygwin - 在我的 zsh 自定义提示(cygwin)中呈现时,一些表情符号图标被切成两半

javascript - 找不到 nest 命令

git - 通过 GitHub 提交 pull 请求的正确方法(为开源做出贡献时)

git - 我在哪里可以找到 git 的所有颜色选项?

bash - git !alias 可以在 bash 和 Powershell 中使用

git:以编程方式知道分支领先/落后于远程分支的程度

Git:忽略已编译的 Google Go

visual-studio-code - 为什么我的输出末尾有 % 符号?

bash - Zsh 中的哪个快捷方式与 Bash 中的 Ctrl-U 相同?