Jak Git stash pop skrytkę w 1.8.3?


290

Właśnie zaktualizowałem Gita. Jestem na Git w wersji 1.8.3.

Dziś rano próbowałem rozpakować zmianę 1 głęboko w stosie.

Uruchomiłem się git stash pop stash@{1}i dostałem ten błąd.

fatal: dwuznaczny argument „stash @ 1”: nieznana wersja lub ścieżka nie znajduje się w działającym drzewie. Użyj „-”, aby oddzielić ścieżki od wersji, na przykład: „git [...] - [...]”

Próbowałem ponad 20 odmian tego, a także applyzamiast tego popbezskutecznie. Co się zmieniło Czy ktoś jeszcze tego doświadczył?


2
Czy próbowałeś uciec z {}?
AlexDev

20
Z Git 2.11 (IV kwartał 2016 r.) Możesz teraz używać git stash pop 1: patrz moja odpowiedź poniżej
VonC

Odpowiedzi:


359
git stash apply n

działa od wersji git 2.11

Oryginalna odpowiedź, być może pomagająca w debugowaniu problemów ze starszą składnią obejmującą ucieczki powłoki:

Jak wskazano wcześniej, nawiasy klamrowe mogą wymagać ucieczki lub cytowania w zależności od systemu operacyjnego, powłoki itp.

Zobacz „ skrytka @ {1} jest niejednoznaczna? ”, Aby uzyskać szczegółowe wskazówki na temat tego, co może pójść nie tak i jak obejść to w różnych powłokach i platformach.

git stash list
git stash apply stash@{n}

git stash stosuje wersję


15
Moją jedyną nitką z tą odpowiedzią jest to, że pytanie pyta, jak do popokreślonej skrytki, a to polecenie applyjest skrytką, a nie wyskakuje. Różnica polega na tym, że pop zarówno stosuje skrytkę do kodu, jak i usuwa samą skrytkę.
Grant Humphries

Nie działa dla mnie. Wystąpił błąd „nieznana opcja: -encodedCommand”
Yuvraj Patil


Zaktualizuj swoją odpowiedź, teraz jestgit stash apply n
Hafiz Temuri

179

Musisz uciec z nawiasów klamrowych:

git stash pop stash@\{1\}

78

Jeśli chcesz mieć pewność, że nie będziesz musiał radzić sobie z cudzysłowami dla składni stash@{x}, użyj Git 2.11 (IV kwartał 2016 r.)

Zobacz commit a56c8f5 (24 października 2016 r.) Autor: Aaron M. Watson ( watsona4) .
(Połączone przez Junio ​​C Hamano - gitster- w commit 9fa1f90 , 31 października 2016)

stash: zezwól na odwołania do skrytek tylko za pomocą indeksu

Zamiast stash@{n}jawnego odwoływania się do „ ”, można po prostu odwoływać się jako „ n”.
Większość użytkowników odwołuje się do skrytek tylko według ich pozycji na stosie skrytek (co nazywam tutaj „indeksem”).

Składnia typowej skrytki ( stash@{n}) jest nieco irytująca i łatwa do zapomnienia, a czasem trudna do prawidłowej ucieczki w skrypcie .

Z tego powodu pożądana jest możliwość robienia rzeczy ze skrytki poprzez proste odwołanie się do indeksu.

Więc:

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

5
Dzięki! Jest to prawdopodobnie najbardziej odpowiednia odpowiedź dla każdego, kto tu przyjedzie w 2019 roku.
Aaron Frary


16

Jak zauważył Robert, znaki cudzysłowu mogą załatwić sprawę:

git stash pop stash@"{1}"

12

Jeśli żadna z powyższych czynności nie działa, znaki cudzysłowu wokół samej skrytki mogą być dla Ciebie przydatne:

git stash pop "stash@{0}"

4

Mam zainstalowany 2.22 i to działało ..

git stash pop --index 1

Nie działa .. $ git stash pop - indeks 1 krytyczny: niejednoznaczny argument „1”: nieznana wersja lub ścieżka nie działa w drzewie roboczym. Użyj „-”, aby oddzielić ścieżki od wersji, na przykład: „git <polecenie> [<wersja> ...] - [<plik> ...]”
Dave Doga Oz

2

Wersja 2.11+ wykorzystuje następujące funkcje:

git stash list

git stash apply n

n to skrytka liczbowa {{}}


1

Najpierw sprawdź listę: -

git stash list

skopiuj indeks, który chcesz wyskoczyć z listy skrytek

git stash pop stash@{index_number}

na przykład.:

git stash pop stash@{1}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.