Stash@{1}是否含糊不清?

我试图得到有关我的存货的信息,但是 git 告诉我,stash@{0}stash@{1}是模棱两可的。git stash list工作得很好,而且 .git/logs/refs/stash似乎有适当的内容(并不是说我是 git 内部的专家)。

% git stash list
stash@{0}: On master: two
stash@{1}: On master: one
% git stash show stash@{1}
fatal: ambiguous argument 'stash@1': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

只要简单的 git stash show就可以了。那么为什么 git stash list给我的名字被认为是模棱两可的呢?

25982 次浏览

您的 shell 正在吞噬您的花括号,所以当您说 stash@{1}时,git 看到的是 stash@1,这对它来说没有意义。引用参数(使用 git stash apply "stash@{1}"或者 git stash apply stash@"{1}"; 引用任何一种方式都可以)或者重新配置你的 shell,当它们之间有一个逗号时,只展开花括号(zsh 可以用任何一种方式配置,bash 只展开花括号中的逗号或者它们之间的范围,其他 shell 可能以这种或者其他方式表现)。

如果在 Emacs 中使用 Windows 上的 Magit 时出现此错误(像我一样)
我希望这个快速的解决方案能够帮助你:

(if (eq system-type 'windows-nt)
(defadvice magit-run-git (before magit-run-git-win-curly-braces (&rest args) activate)
"Escape {} on Windows"
(setcar (nthcdr 2 args)
(replace-regexp-in-string "{\\([0-9]+\\)}" "\\\\{\\1\\\\}" (elt args 2)))
)
)

这将在由 magit-run-git运行的 ("stash", "cmd", "stash@{0}")中的第3个参数中引用 {}

你好,我也遇到过同样的事情,最简单的解决办法是:

$ git stash apply stash@"{2}"

我用的是 windows git shell。

对于 zsh 用户:

$ git stash apply stash@'{'1'}'

只需在简单的引号之间加上隐藏的 id:

git stash apply 'stash@{1}'