Comment Git stash pop stash spécifique en 1.8.3?

290

Je viens de mettre à jour Git. Je suis sur Git version 1.8.3.

Ce matin, j'ai essayé de déchausser un changement 1 profondément dans la pile.

J'ai couru git stash pop stash@{1}et j'ai eu cette erreur.

fatal: argument ambigu 'stash @ 1': révision inconnue ou chemin d'accès absent de l'arborescence de travail. Utilisez '-' pour séparer les chemins des révisions, comme ceci: 'git [...] - [...]'

J'ai essayé environ 20+ variantes à ce sujet ainsi que l'utilisation applyau lieu de popsans succès. Qu'est-ce qui a changé? Quelqu'un d'autre a rencontré ça?

Jesse Atkinson
la source
2
Avez-vous essayé d'échapper aux {}?
AlexDev
20
Avec Git 2.11 (Q4 2016), vous pouvez maintenant utiliser git stash pop 1: voir ma réponse ci
VonC

Réponses:

359
git stash apply n

fonctionne à partir de la version 2.11 de git

Réponse originale, pouvant aider à déboguer des problèmes avec l'ancienne syntaxe impliquant des échappements shell:

Comme indiqué précédemment, les accolades peuvent nécessiter un échappement ou des guillemets selon votre système d'exploitation, votre shell, etc.

Voir « Stash @ {1} est ambigu? » Pour quelques conseils détaillés de ce qui peut aller mal, et la façon de travailler autour d' elle dans diverses coquilles et plates - formes.

git stash list
git stash apply stash@{n}

git stash appliquer la version

Bob Gilmore
la source
15
Mon seul problème avec cette réponse est que la question demande comment popcréer une cachette spécifique et cette commande applyest la cachette plutôt que de la faire sauter. La différence étant qu'un pop applique à la fois la cachette au code et supprime la cachette elle-même.
Grant Humphries du
Ne travaille pas pour moi. Obtenir l'erreur "option inconnue: -encodedCommand"
Yuvraj Patil
14
Depuis la version 2.11, vous pouvez taper: git stash apply n
Dwhitz
Veuillez mettre à jour votre réponse, c'est maintenantgit stash apply n
Hafiz Temuri
179

Vous devez échapper aux accolades:

git stash pop stash@\{1\}
Vasiliy
la source
78

Si vous voulez être sûr de ne pas avoir à traiter les guillemets pour la syntaxe stash@{x}, utilisez Git 2.11 (Q4 2016)

Voir commit a56c8f5 (24 octobre 2016) par Aaron M Watson ( watsona4) .
(Fusionné par Junio ​​C Hamano - gitster- en commit 9fa1f90 , 31 oct 2016)

stash: autorise le référencement des stashes par index uniquement

Au lieu de référencer " stash@{n}" explicitement, permettez simplement de référencer " n".
La plupart des utilisateurs ne font référence aux stashes que par leur position dans la pile de stash (ce que j'appelle ici "l'index").

La syntaxe de la cachette typique ( stash@{n}) est légèrement ennuyeuse et facile à oublier, et parfois difficile à échapper correctement dans un script .

Pour cette raison, la capacité de faire des choses avec la cachette en référençant simplement l'index est souhaitable.

Alors:

git stash drop 1
git stash pop 1
git stash apply 1
git stash show 1
VonC
la source
5
Merci! C'est probablement la réponse la plus pertinente pour tous ceux qui viendront ici en 2019.
Aaron Frary
52

Sur Windows Powershell, je lance ceci:

git stash apply "stash@{1}"
Robert Brooker
la source
2
Fonctionne également sur Ubuntu Linux
Bouke Versteegh
fonctionne également sur Mac OS X. J'aime mieux cela que d'échapper à des caractères simples.
Félix Gagnon-Grenier
16

Comme l'a souligné Robert, les guillemets peuvent faire l'affaire pour vous:

git stash pop stash@"{1}"
owenmck
la source
12

Si aucun des éléments ci-dessus ne fonctionne, des guillemets autour de la cachette elle-même pourraient fonctionner pour vous:

git stash pop "stash@{0}"
Kenan
la source
4

J'ai installé 2.22 et cela a fonctionné ..

git stash pop --index 1
markg
la source
Cela ne fonctionne pas. $ Git stash pop --index 1 fatal: argument ambigu '1': révision ou chemin inconnu pas dans l'arborescence de travail. Utilisez '-' pour séparer les chemins des révisions, comme ceci: 'git <command> [<revision> ...] - [<file> ...]'
Dave Doga Oz
2

La version 2.11+ utilise les éléments suivants:

git stash list

git stash apply n

n est le numéro caché @ {12}

manish kumar
la source
1

Vérifiez d'abord la liste: -

git stash list

copiez l'index que vous vouliez faire apparaître dans la liste cachée

git stash pop stash@{index_number}

par exemple.:

git stash pop stash@{1}
Jabbi Syed
la source