Wie kann ich Pop-spezifische Stash in 1.8.3 Git verstauen?

290

Ich habe gerade Git aktualisiert. Ich bin auf Git Version 1.8.3.

Heute Morgen habe ich versucht, eine Änderung 1 tief im Stapel zu lösen.

Ich bin gelaufen git stash pop stash@{1}und habe diesen Fehler bekommen.

fatal: mehrdeutiges Argument 'stash @ 1': unbekannte Revision oder Pfad nicht im Arbeitsbaum. Verwenden Sie '-', um Pfade von Revisionen wie folgt zu trennen: 'git [...] - [...]'

Ich habe mehr als 20 Variationen davon ausprobiert und verwendet, applyanstatt popohne Erfolg. Was hat sich geändert? Ist noch jemand darauf gestoßen?

Jesse Atkinson
quelle
2
Hast du versucht, den {} zu entkommen?
AlexDev
20
Mit Git 2.11 (Q4 2016) können Sie jetzt verwenden git stash pop 1: siehe meine Antwort unten
VonC

Antworten:

359
git stash apply n

funktioniert ab git version 2.11

Ursprüngliche Antwort, die möglicherweise dazu beiträgt, Probleme mit der älteren Syntax zu beheben, die Shell-Escapezeichen betreffen:

Wie bereits erwähnt, müssen die geschweiften Klammern je nach Betriebssystem, Shell usw. möglicherweise maskiert oder in Anführungszeichen gesetzt werden.

Unter " stash @ {1} ist mehrdeutig? " Finden Sie einige detaillierte Hinweise darauf, was möglicherweise schief geht und wie Sie es in verschiedenen Shells und Plattformen umgehen können.

git stash list
git stash apply stash@{n}

Git Stash Apply Version

Bob Gilmore
quelle
15
Mein einziger Nachteil bei dieser Antwort ist, dass in der Frage gefragt wird, wie popein bestimmter Stash erstellt werden soll, und dieser Befehl ist applyder Stash, anstatt ihn zu öffnen. Der Unterschied besteht darin, dass ein Pop sowohl den Stash auf den Code anwendet als auch den Stash selbst löscht.
Grant Humphries
Ich arbeite nicht für mich. Fehler "unbekannte Option: -encodedCommand"
Yuvraj Patil
14
Seit der Version 2.11 können Sie git stash apply n
eingeben
Bitte aktualisieren Sie Ihre Antwort, es ist jetztgit stash apply n
Hafiz Temuri
179

Sie müssen den Zahnspangen entkommen:

git stash pop stash@\{1\}
Vasiliy
quelle
78

Wenn Sie sicher sein möchten, dass Sie sich nicht mit Anführungszeichen für die Syntax befassen müssen stash@{x}, verwenden Sie Git 2.11 (Q4 2016).

Siehe Commit a56c8f5 (24. Oktober 2016) von Aaron M Watson ( watsona4) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 9fa1f90 , 31. Oktober 2016)

stash: Ermöglichen, dass Stashes nur vom Index referenziert werden

Anstatt stash@{n}explizit auf " " zu verweisen, können Sie einfach auf " n" verweisen .
Die meisten Benutzer referenzieren Stashes nur anhand ihrer Position im Stash-Stack (was ich hier als "Index" bezeichne).

Die Syntax für das typische stash ( stash@{n}) ist etwas nervig und leicht zu vergessen und manchmal schwierig, in einem Skript richtig zu entkommen .

Aus diesem Grund ist die Fähigkeit wünschenswert, Dinge mit dem Stash durch einfaches Referenzieren des Index zu tun.

So:

git stash drop 1
git stash pop 1
git stash apply 1
git stash show 1
VonC
quelle
5
Vielen Dank! Dies ist wahrscheinlich die relevanteste Antwort für jeden, der 2019 hierher kommt.
Aaron Frary
52

Unter Windows Powershell führe ich Folgendes aus:

git stash apply "stash@{1}"
Robert Brooker
quelle
2
Funktioniert auch unter Ubuntu Linux
Bouke Versteegh
funktioniert auch unter Mac OS X. Mir gefällt das besser, als einzelnen Zeichen zu entkommen.
Félix Gagnon-Grenier
16

Wie Robert betonte, könnten Anführungszeichen den Trick für Sie tun:

git stash pop stash@"{1}"
owenmck
quelle
12

Wenn keines der oben genannten Verfahren funktioniert, können Anführungszeichen um das Versteck selbst für Sie funktionieren:

git stash pop "stash@{0}"
Kenan
quelle
4

Ich habe 2.22 installiert und das hat funktioniert ..

git stash pop --index 1
markg
quelle
Es funktioniert nicht .. $ git stash pop --index 1 fatal: mehrdeutiges Argument '1': unbekannte Revision oder Pfad nicht im Arbeitsbaum. Verwenden Sie '-', um Pfade von Revisionen wie folgt zu trennen: 'git <Befehl> [<Überarbeitung> ...] - [<Datei> ...]'
Dave Doga Oz
2

Version 2.11+ verwenden Folgendes:

git stash list

git stash apply n

n ist das Zahlenlager @ {12}

manish kumar
quelle
1

Überprüfen Sie zuerst die Liste: -

git stash list

Kopieren Sie den Index, den Sie aus der Stash-Liste entfernen möchten

git stash pop stash@{index_number}

z.B.:

git stash pop stash@{1}
Jabbi Syed
quelle