Как сделать 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
Хафиз Темури
180

Вам нужно избежать скобок:

git stash pop stash@\{1\}
Василий
источник
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
VonC
источник
5
Спасибо! Вероятно, это самый актуальный ответ для всех, кто приедет сюда в 2019 году.
Аарон Фраери
52

На Windows Powershell я запускаю это:

git stash apply "stash@{1}"
Роберт Брукер
источник
2
Работает и на Ubuntu Linux
Bouke Versteegh
также работает на Mac OS X. Мне нравится это лучше, чем экранирование отдельных символов.
Феликс Ганьон-Гренье
16

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

git stash pop stash@"{1}"
owenmck
источник
12

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

git stash pop "stash@{0}"
Кенан
источник
4

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

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

Версия 2.11+ использует следующее:

git stash list

git stash apply n

n - это тайник @ {12}

маниш кумар
источник
1

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

git stash list

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

git stash pop stash@{index_number}

например.:

git stash pop stash@{1}
Джабби Сайед
источник