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?


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


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


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\}

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

5
Vielen Dank! Dies ist wahrscheinlich die relevanteste Antwort für jeden, der 2019 hierher kommt.
Aaron Frary


16

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

git stash pop stash@"{1}"

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}"

4

Ich habe 2.22 installiert und das hat funktioniert ..

git stash pop --index 1

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}


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}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.