我想从stash中检出一个文件:
git checkout stash@{0} -- some/file
Run Code Online (Sandbox Code Playgroud)
这失败了 fatal: invalid reference: stash@0
看起来花括号被淘汰了,但我不确定罪魁祸首.
存储修订就在那里.git stash list回报
stash@{0}: WIP on X
stash@{1}: WIP on Y
Run Code Online (Sandbox Code Playgroud)
我在zsh上使用git 1.9.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)
Run Code Online (Sandbox Code Playgroud)
荣誉对chepner怀疑该BRACE_CLL zsh选项可以设置,这的确不产生症状:
$ setopt BRACE_CCL
$ echo stash@{0}
stash@0 # !! braces removed
Run Code Online (Sandbox Code Playgroud)
正如chepner所说,BRACE_CCL"原因{0}被视为包含一个字符的字符类,而不是字面上的对待"; 换句话说:BRACE_CCL扩展内部的每个单独的字符{...}(例如,echo a{01}- > a0 a1)并且只指定一个字符,净效果是删除封闭的大括号.
由于OP自己已经确认,unsetopt BRACE_CCL解决了这个问题.
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |