git stash stosuje wersję

513

Mam 2 oddziały: mistrz | projekt

Pracując w projektowaniu, zrobiłem skrytkę i przestawiłem się na master, dokonałem pewnych poprawek. Wróciłem do projektowania i wykonałemstash apply tylko, aby stracić wszystkie moje zmiany w branży projektowania.

Mam nadzieję, że cała moja praca jest w skrytce, ponieważ ich nie wyczyściłem ani nie usunąłem.

Jeśli wykonam listę zapasów, otrzymam 4 wyniki:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Jeśli spróbuję git stash apply f2c0c72, pojawia się błąd:

fatal: Needed a single revision
f2c0c72: no valid stashed state found

Jak mogę zastosować określoną skrytkę?

Zawietrzny
źródło
26
Zauważ, że masz teraz (Q4 2016, Git 2.11) składnię git stash apply 0(zamiast git stash apply stash@{0}). Zobacz moją odpowiedź tutaj .
VonC

Odpowiedzi:

838

Klucze do skrytki to tak naprawdę stash@{n}przedmioty po lewej stronie. Więc spróbuj:

git stash apply stash@{0}

(zwróć uwagę, że w niektórych muszlach musisz zacytować "stash@{0}", np. zsh, fish i powerhell).

Od wersji 2.11, to całkiem proste, można użyć liczby N stosu zamiast używać stash@{n}. Więc teraz zamiast używać:

git stash apply "stash@{n}"

Możesz pisać:

git stash apply n

Aby uzyskać listę skrytek:

git stash list

W rzeczywistości stash@{0}jest to wersja git, którą możesz przełączyć na ... ale git stash apply ...powinieneś dowiedzieć się, jak DTRT zastosować ją do bieżącej lokalizacji.

araqnid
źródło
90
Tylko uwaga, że ​​w niektórych muszlach należy zacytować skrytkę @ {n}.
Senjai
7
Kolejna wskazówka: możesz np. gitk stash@{0}Pokazać zmiany, które wprowadziłeś w konkretnej skrytce.
antinome
11
Użytkownicy zsh muszą dwukrotnie zacytować np.git stash apply "stash@{0}"
mynameistechno
7
stash@{n}jest najbardziej niezręcznym poleceniem do pisania. Czy istnieją inne skróty, aby to zrobić poza utworzeniem własnego aliasu lub funkcji?
Dylanthepiguy
2
git stash apply njest spokojny
Victor
240

Aby zastosować skrytkę i usunąć ją z listy skrytek, uruchom:

git stash pop stash@{n}

Aby zastosować skrytkę i zachować ją w pamięci podręcznej skrytki, uruchom:

git stash apply stash@{n}
Dan Loewenherz
źródło
8
To świetnie, dziękuję za rozróżnienie dwóch opcji. Właśnie wypróbowałem to i wydaje się, że jeśli przebijesz skrytkę z gałęzi-a na gałąź-b, skrytka nadal pozostanie w pamięci podręcznej skrytki. Sądzę, że tak by było, więc nadal będziesz mieć możliwość pop / zastosowania skrytki do oddziału-a w przyszłości. Naprawdę mam nadzieję, że to miało sens. Poręczny!
longda
42
W przypadku programu PowerShell:git stash pop "stash@{n}"
ankitjaininfo
1
PowerShell jest zadowolony z tylko nawiasów klamrowych w cudzysłowach / pojedynczych cudzysłowach:git stash apply stash@"{n}"
m1kael
PowerShell również zaakceptuje git stash apply stash@`{n`}(zwróć uwagę na backsticks przed nawiasami klamrowymi).
Ian Kemp,
52

Od wersji 2.11, to całkiem proste, można użyć liczby N stosu zamiast mówić "stash@{n}". Więc teraz zamiast używać:

git stash apply "stash@{n}"

Możesz pisać:

git stash apply n

Na przykład na liście:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Jeśli chcesz złożyć podanie, stash@{1}możesz wpisać:

git stash apply 1

W przeciwnym razie możesz go użyć, nawet jeśli masz pewne zmiany w katalogu od wersji 1.7.5.1, ale musisz mieć pewność, że skrytka nie zastąpi zmian w katalogu roboczym, jeśli tak się stanie, pojawi się błąd:

error: Your local changes to the following files would be overwritten by merge:
        file
Please commit your changes or stash them before you merge.

W wersjach wcześniejszych niż 1.7.5.1 odmawiał działania, jeśli nastąpiła zmiana w katalogu roboczym.


Informacje o wersji Git:

Użytkownik zawsze musi mówić „skrytka @ {$ N}” podczas nazywania pojedynczego elementu w domyślnej lokalizacji skrytki, tj. Rejestruje się w refs / stash. Polecenie „git stash” nauczyło się akceptować „git stash apply 4” jako skrót dla „git stash apply stash @ {4}”

git stash apply ”używany do odmowy pracy, jeśli nastąpiła jakaś zmiana w drzewie roboczym, nawet jeśli zmiana nie pokrywała się ze zmianą zarejestrowanej skrytki

Pau
źródło
41

Jeśli ktoś znajduje się na komputerze z systemem Windows i w programie PowerShell, należy zacytować taki argument:

git stash apply "stash@{0}"

... lub, aby zastosować zmiany i usunąć ze schowka:

git stash pop "stash@{0}"

W przeciwnym razie bez cytatów możesz otrzymać ten błąd:

fatal: dwuznaczny argument „stash @”: nieznana wersja lub ścieżka nie działa w drzewie roboczym.

jterry
źródło
Najwyraźniej tak właśnie musisz to zrobić, używając powłoki rybnej na Mac OSX 10.11.
lps
8
git stash list

następnie wybierz skrytkę do zastosowania i użyj tylko numeru:

git stash apply 1
panthari
źródło
2
Git Stash list 

Lista pokaże wszystkie ukryte elementy, np .: stash @ {0} :, stash @ {1}:, .., stash @ {n}:

Następnie wybierz liczbę n, która oznacza skrytkę @ {n}:

git stash apply n 

for eg: git stash apply 1 will apply that particular stashed changes to the current branch
Harshavardhan Reddy.
źródło