stash @ {1} неоднозначно?

122

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

редкий
источник
1
В моем случае у меня каким-то образом оказалась ветка с именем stash, которая вызвала ошибку.
Zaz
И в моем случае у меня был пульт с именем stash, вызывающий ошибку!
Роберт Муил

Ответы:

231

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

Ян Худек
источник
1
@sehe: тот, который сейчас используется Uncommon. Цитируемое сообщение об ошибке ясно указывает на это (нет, похоже, это не может быть bash).
Ян Худек
83
В Windows PowerShell тоже ест скобки. Вы можете избежать их с помощью (git stash drop stash@`{1`})
обратной
8
Спасибо, что случилось с Fish, не был уверен, что происходит.
Элайджа Линн
3
@Sergey используйте для PowerShell либо stash @ `{0`} (обратные кавычки), либо 'stash @ {0}' (одинарные кавычки).
Ганс
4
Ой, через год я снова вернулся к этому, потому что у меня была проблема. Просто показывает, как редко я этим пользуюсь. Затем, чтобы убедиться, я оставил комментарий выше, в котором говорится, что это действительно происходит с Fish. Очень смешно.
Элайджа Линн
23

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

$ git stash apply stash@"{2}"

Я использую оболочку git для Windows.

Д.Ф.
источник
2
Такжеgit stash apply "stash@{2}"
rsenna
1
Работает для powershell
rsenna
тот же git stash apply "stash @ {2}" работал у меня, я получал сообщение "unknown option: -encodedCommand" при попытке git stash мой третий тайник, я использовал код Visual Studio, который имеет интеграцию с PowerShell в качестве терминала.
Раджан Чаухан
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)))
    )
  )

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

Сергей
источник
1

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

$ git stash apply stash@'{'1'}'
user3251328
источник
1

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

git stash apply 'stash@{1}'
Адриано
источник
3
Как это отвечает на вопрос? В списке тайников нет индекса №3. Если это серьезный ответ, пожалуйста, объясните, почему эта команда решит проблему
Брэд
Я отредактировал свой ответ для ясности: основная идея заключалась в том, чтобы просто поместить id тайника между простыми кавычками. Это применимо к подкомандам «применить» или «удалить». Идентификационный номер
Адриано
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причины вашего предложения кода.
DimaSan 09