iTerm2 中的 Zsh 完成导致 git 推送错误

Zsh in iTerm2 completion causing git push error

我正在将 Zsh 与 iTerm2 一起使用,并试图按照 these instructions 删除我不小心推送到 repo 的提交(别担心,除了我之外它没有任何关注者)。

运行命令

git push -f origin HEAD^:develop

导致 Zsh 出错

error: src refspec HEADER does not match any.
error: failed to push some refs to 'git@github.com:xxx/yyy.git'

此目录中有一个名为 HEADER 的文件,所以我认为 Zsh 或 iTerm 试图通过使用 ^.

进行一些补全来变得聪明

我在 Terminal.app 中执行了相同的推送命令(它仍然使用 /bin/sh)并且成功了。

这是什么 Zsh/iTerm 行为,我该如何控制它?

我怀疑 zsh 正在尝试扩展 HEAD^:develop,这是一个有效的 glob 模式并且与 HEADER 文件准确匹配。

一个简单的解决方案是将您的参数用引号引起来,这将防止 zsh "helpful" 并为您扩展这些 globbing 模式:

git push -f origin "HEAD^":develop

您还可以转义有问题的字符(如 git-rm 的文档中所建议):

git push -f origin HEAD\^:develop