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, что хотим, чтобы при сбое сопоставления с образцом просто использовалась команда "как есть".