10

私はcygwinでzshとpreztoを使用しています。この git コマンド 'git reset HEAD5' を入力すると、zsh は HEAD^ を見つけられません。しかし、bash を使用するように切り替えると、機能します。

$ git reset HEAD^                                        
zsh: no matches found: HEAD^

誰も同じ問題を見たことがありますか?

4

4 に答える 4

27

この文字は、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 には によって有効になる拡張グロブ機能がありますが、bash の拡張グロブ構文は文字を特別なものとしてshopt -s extglob扱いません。)^

この機能を有効にすると、^は に似て*いますが意味が異なる特殊文字です。のよう*に、一重引用符または二重引用符で囲むか、前にバックスラッシュを付けてエスケープすることにより、その特別な意味を抑制することができます。引用は最も簡単な解決策です。

それよりも

git reset HEAD^

これを試して:

git reset 'HEAD^'

^ワイルドカードを使用しないようにすればよいので、ワイルドカードの意味は関係ありませんが、とにかく言及します。zsh のマニュアルによると、 pattern以外^Xのすべてに一致します。の場合、-- の後に何も続きません。これは、一致の後に何もない以外のものが続くことを意味します。これは、空でない文字列で始まり、その後に続くファイル名に一致するという言い方です。ファイル、、およびを指定すると、パターンは および に一致します。XHEAD^^HEAD^HEADHEAD^HEADHEADHEAD1HEAD2HEAD^HEAD1HEAD2

于 2014-10-10T09:02:03.827 に答える
5

^文字を回避するための簡単な回避策は、git reset head~1代わりに を使用することですgit reset head^

両者の違いについては、この投稿を参照してください。

于 2016-04-18T14:29:04.023 に答える