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?


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


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


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

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

5
Merci! C'est probablement la réponse la plus pertinente pour tous ceux qui viendront ici en 2019.
Aaron Frary


16

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

git stash pop stash@"{1}"

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

4

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

git stash pop --index 1

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}


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}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.