Я пытаюсь проверить один файл из stash:
git checkout stash@{0} -- some/file
Это не выполняется с fatal: invalid reference: stash@0
Похоже, что фигурные скобки устранены, но я не уверен в виновности.
Здесь есть ревизия. git stash list
возвращает
stash@{0}: WIP on X
stash@{1}: WIP on Y
Я использую git 1.9.1 на zsh.
Есть ли способ предотвратить устранение этой фигурной скобки?
Ответ 1
Как правило, лучше указывать строки, содержащие последовательности {...}
(например, git checkout 'stash@{0}' ...
), поскольку они подчиняются расширение скобки.
(Или, если на то пошло, одинарная кавычка, любой строковый литерал, который вы хотите сохранить как есть.)
Однако в стандарте zsh
этот не будет проблемой, потому что {0}
не является допустимым выражением скобки и поэтому просто печатается как (в равной степени относится к bash
, dash
и ksh
); подтвердите с помощью:
echo stash@{0} # prints as is in bash, dash, ksh, zsh (with default options in effect)
Престижность chepner за подозрение, что параметр BRACE_CLL
zsh
может быть установлен, что действительно вызывает симптом
$ setopt BRACE_CCL
$ echo stash@{0}
stash@0 # !! braces removed
В качестве состояний chepner BRACE_CCL
"вызывает {0}
для обработки как символьный класс, содержащий один символ, а не для обработки буквально"; Другими словами: BRACE_CCL
расширяет каждый отдельный символ внутри {...}
(например, echo a{01}
→ a0 a1
) и с указанием только одного символа, чистый эффект - удаление прилагаемых фигурных скобок.
Как подтвердил сам ОП, unsetopt BRACE_CCL
решил проблему.