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ł?

Jesse Atkinson
źródło
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ę

Bob Gilmore
źródło
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
14
Od wersji 2.11 możesz pisać: git stash apply n
Dwhitz
Zaktualizuj swoją odpowiedź, teraz jestgit stash apply n
Hafiz Temuri
179

Musisz uciec z nawiasów klamrowych:

git stash pop stash@\{1\}
Wasilij
źródło
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
VonC
źródło
5
Dzięki! Jest to prawdopodobnie najbardziej odpowiednia odpowiedź dla każdego, kto tu przyjedzie w 2019 roku.
Aaron Frary
52

W Windows Powershell uruchamiam to:

git stash apply "stash@{1}"
Robert Brooker
źródło
2
Działa również na Ubuntu Linux
Bouke Versteegh
działa również w systemie Mac OS X. Podoba mi się to bardziej niż unikanie pojedynczych znaków.
Félix Gagnon-Grenier
16

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

git stash pop stash@"{1}"
owenmck
źródło
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}"
Kenan
źródło
4

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

git stash pop --index 1
markg
źródło
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 {{}}

manish kumar
źródło
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}
Jabbi Syed
źródło