Тайник @{1} неоднозначен?

Я пытаюсь получить информацию о моем тайнике, но мерзавец говорит мне, что 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 дает мне считать неоднозначным?

5 ответов

Решение

Твоя раковина пожирает твои фигурные скобки, так что пока ты говоришь stash@{1}мерзавец видит stash@1 и это не имеет смысла для этого. Цитировать аргумент (используйте git stash apply "stash@{1}") или переконфигурируйте вашу оболочку, чтобы расширять только фигурные скобки, если между ними есть запятая (zsh можно настроить в любом случае, bash расширяет только фигурные скобки с запятой или диапазоном между ними, другие оболочки могут вести себя так или иначе).

Привет, со мной случилось то же самое. Самый простой способ исправить это было:

$ git stash apply stash@"{2}"

Я использую оболочку Windows Gi t.

Просто поместите идентификатор тайника между простыми кавычками:

git stash apply 'stash@{1}'

Если у вас есть эта ошибка при работе в Emacs с Magit на Windows (как я)
Я надеюсь, что это быстрое решение поможет вам:

(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)))
    )
  )

Это будет цитата {} в 3-м параметре в ("stash", "cmd", "stash@{0}") который управляется magit-run-git

Для пользователей zsh:

$ git stash apply stash@'{'1'}'
Другие вопросы по тегам