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
我正在将 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