Как сделать Git stash pop специфичным для stash в 1.8.3?


290

Я только что обновил Git. Я на Git версии 1.8.3.

Этим утром я попытался развернуть изменение 1 глубоко в стеке.

Я побежал git stash pop stash@{1}и получил эту ошибку.

fatal: неоднозначный аргумент 'stash @ 1': неизвестная ревизия или путь не в рабочем дереве. Используйте '-', чтобы отделить пути от ревизий, например: 'git [...] - [...]'

Я попытался около 20+ вариаций на это , а также использовать applyвместо popбезуспешно. Что изменилось? Кто-нибудь еще сталкивался с этим?


2
Вы пытались сбежать из {}?
AlexDev

20
С Git 2.11 (4 квартал 2016 года) вы теперь можете использовать git stash pop 1: см. Мой ответ ниже
VonC

Ответы:


360
git stash apply n

работает с git версии 2.11

Оригинальный ответ, возможно помогающий отладить проблемы со старым синтаксисом, включающим экранирование оболочки:

Как указывалось ранее, фигурные скобки могут потребовать экранирования или цитирования в зависимости от вашей ОС, оболочки и т. Д.

Посмотрите " stash @ {1} является неоднозначным? " Для некоторых подробных подсказок о том, что может пойти не так, и как обойти это в различных оболочках и платформах.

git stash list
git stash apply stash@{n}

git stash применить версию


15
Моя единственная гадость с этим ответом состоит в том, что вопрос спрашивает, как к popконкретному тайнику, и эта команда applyявляется тайником, а не выталкивает его. Разница в том, что pop одновременно применяет тайник к коду и удаляет сам тайник.
Грант Хамфрис

Не работает для меня Получение ошибки «Неизвестная опция: -encodedCommand»
Yuvraj Patil


Пожалуйста, обновите свой ответ, его сейчасgit stash apply n
Хафиз Темури


78

Если вы хотите быть уверенным, что вам не придется иметь дело с цитатами для синтаксиса stash@{x}, используйте Git 2.11 (4 квартал 2016 года)

См. Коммит a56c8f5 (24 октября 2016 г.) Аарона М. Уотсона ( watsona4) .
(Слиты Junio C Hamano - gitster- в фиксации 9fa1f90 , 31 окт 2016)

stash: разрешить ссылки на тайники только по индексу

Вместо того, чтобы ссылаться на " stash@{n}" явно, сделайте возможным просто ссылаться как " n".
Большинство пользователей ссылаются на тайники только по их положению в стеке тайников (что я называю здесь «индексом»).

Синтаксис для типичной функции stash ( stash@{n}) немного раздражает, и его легко забыть, а иногда его трудно избежать в скрипте .

Из-за этого желательна возможность делать вещи с тайником, просто ссылаясь на индекс.

Так:

git stash drop 1
git stash pop 1
git stash apply 1
git stash show 1

5
Спасибо! Вероятно, это самый актуальный ответ для всех, кто приедет сюда в 2019 году.
Аарон Фраери


16

Как указал Роберт, кавычки могут помочь вам:

git stash pop stash@"{1}"

12

Если ничего из вышеперечисленного не сработало, кавычки вокруг самого тайника могут сработать:

git stash pop "stash@{0}"

4

У меня установлен 2.22, и это сработало ..

git stash pop --index 1

Это не работает .. $ git stash pop --index 1 fatal: неоднозначный аргумент '1': неизвестная ревизия или путь вне рабочего дерева. Используйте '-', чтобы отделить пути от ревизий, например: 'git <command> [<revision> ...] - [<file> ...]'
Дейв Дога Оз


1

Сначала проверьте список: -

git stash list

скопируйте индекс, который вы хотите получить из списка тайников

git stash pop stash@{index_number}

например.:

git stash pop stash@{1}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.