Zsh не распознает ГОЛОВУ ^

Я использую Zsh и Презто с Cygwin. Когда я набираю эту команду git 'git reset HEAD5', zsh не находит HEAD^. Но когда я переключаюсь на использование bash, это работает.

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

Кто-нибудь видел такую ​​же проблему?

4 ответа

^ символ рассматривается как особый в расширениях имен файлов в 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 не обрабатывает ^ характер как особенный.)

С этой функцией, ^ специальный символ, похожий на * но с другим смыслом. подобно *Вы можете запретить его особое значение, избегая его, заключив его в одинарные или двойные кавычки или поставив перед ним обратную косую черту. Цитирование является самым простым решением.

Скорее, чем

git reset HEAD^

попробуй это:

git reset 'HEAD^'

Значение ^ подстановочный знак не имеет значения, так как все, что вам нужно сделать, это избегать его использования, но я все равно упомяну об этом. Согласно руководству Zsh, ^X соответствует всему, кроме шаблона X, Для случая HEAD^ничто не следует за ^ -- Который означает, что HEAD^ Матчи HEAD сопровождаемый чем-либо кроме ничего. Это окольный способ сказать, что HEAD^ соответствует именам файлов, начинающимся с HEAD и сопровождается некоторой непустой строкой. Данные файлы HEAD, HEAD1, а также HEAD2, шаблон HEAD^ Матчи HEAD1 а также HEAD2,

Быстрый обходной путь, чтобы избежать ^ персонаж должен использовать git reset head~1 вместо git reset head^,

Смотрите этот пост для разницы между ними.

вопрос 449 о-о-мой-Zsh описывает это точное поведение и предоставляет решение.

Виновником является вариант extended_glob на зш. Престо, должно быть, устанавливает это. Поэтому, когда вы печатаете HEAD^ Zsh пытается создать глобальное отрицательное выражение и завершается ошибкой.

Другими словами, setopt extended_glob позволяет нам использовать ^ отрицать шары.

Чтобы исправить это, вы можете написать эту строку на .zshrc:

unsetopt nomatch 

В приведенной выше строке мы говорим zsh, что хотим, чтобы при сбое сопоставления с образцом просто использовалась команда "как есть".

На Mac избегайте ^ в вашей команде:

      git reset --soft HEAD\^
Другие вопросы по тегам