git stash appliquer la version

513

J'ai 2 branches: master | conception

Travaillant dans la conception, j'ai fait un stash et je suis passé au master, j'ai fait quelques ajustements. stash applyJe suis revenu au design et j'ai seulement perdu toutes mes modifications dans la branche design.

J'espère que tout mon travail est dans une cachette car je ne les ai pas effacés ou supprimés.

Si je fais une liste cachée, j'obtiens 4 résultats:

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

Si j'essaye git stash apply f2c0c72, j'obtiens une erreur:

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

Comment puis-je appliquer une cachette spécifique?

Lee
la source
26
Notez que vous avez maintenant (Q4 2016, Git 2.11) la syntaxe git stash apply 0(au lieu de git stash apply stash@{0}). Voir ma réponse ici .
VonC

Réponses:

839

Les clés dans la cachette sont en fait les stash@{n}éléments sur la gauche. Alors essayez:

git stash apply stash@{0}

(notez que dans certains coquilles, vous devez citer "stash@{0}", comme zsh, fish et powershell).

Depuis la version 2.11, c'est assez simple, vous pouvez utiliser le numéro de pile N au lieu d'utiliser stash@{n}. Alors maintenant, au lieu d'utiliser:

git stash apply "stash@{n}"

Vous pouvez taper:

git stash apply n

Pour obtenir la liste des stashes:

git stash list

En fait, stash@{0}c'est une révision dans git que vous pouvez basculer vers ... mais git stash apply ...devrait comprendre comment DTRT pour l'appliquer à votre emplacement actuel.

araqnid
la source
90
Juste une note que sur certains shells, la cachette @ {n} doit être citée.
Senjai
7
Autre astuce: vous pouvez par exemple gitk stash@{0}afficher les modifications que vous avez apportées dans une cachette particulière.
antinome
11
les utilisateurs de zsh doivent doubler la citation, par exemplegit stash apply "stash@{0}"
mynameistechno
7
stash@{n}est la commande la plus maladroite à taper. Y a-t-il des raccourcis pour faire cela autre que la création de votre propre alias ou fonction?
Dylanthepiguy
2
git stash apply nest paisible
Victor
242

Pour appliquer une stash et la supprimer de la liste de stash, exécutez:

git stash pop stash@{n}

Pour appliquer une stash et la conserver dans le cache de stash, exécutez:

git stash apply stash@{n}
Dan Loewenherz
la source
8
C'est super, merci d'avoir fait la distinction entre les deux options. Je viens de l'essayer et il semble que si vous placez une cachette de la branche-a sur la branche-b, la cachette restera toujours dans le cache de la cachette. Je suppose que ce serait donc vous avez toujours la possibilité de pop / appliquer la cachette à la branche-a à une date ultérieure. J'espère vraiment que cela a du sens. Pratique!
longda
42
Pour PowerShell:git stash pop "stash@{n}"
ankitjaininfo
1
PowerShell est satisfait des accolades juste bouclées entre guillemets / guillemets simples:git stash apply stash@"{n}"
m1kael
PowerShell acceptera également git stash apply stash@`{n`}(notez les backticks avant les accolades).
Ian Kemp
52

Depuis la version 2.11, c'est assez simple, vous pouvez utiliser le numéro de pile N au lieu de dire "stash@{n}". Alors maintenant, au lieu d'utiliser:

git stash apply "stash@{n}"

Vous pouvez taper:

git stash apply n

Par exemple, dans votre liste:

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

Si vous souhaitez postuler, stash@{1}vous pouvez taper:

git stash apply 1

Sinon, vous pouvez l'utiliser même si vous avez des modifications dans votre répertoire depuis la 1.7.5.1, mais vous devez être sûr que la cachette n'écrasera pas les modifications de votre répertoire de travail si c'est le cas, vous obtiendrez une erreur:

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

Dans les versions antérieures à 1.7.5.1, il refusait de fonctionner s'il y avait un changement dans le répertoire de travail.


Notes de mise à jour de Git:

L'utilisateur doit toujours dire "stash @ {$ N}" lorsqu'il nomme un seul élément à l'emplacement par défaut du stash, c'est-à-dire reflogs dans refs / stash. La commande "git stash" a appris à accepter "git stash apply 4" comme raccourci pour "git stash apply stash @ {4}"

git stash apply "utilisé pour refuser de travailler s'il y avait un changement dans l'arbre de travail, même lorsque le changement ne chevauchait pas le changement enregistré

Pau
la source
41

Si l'on est sur une machine Windows et dans PowerShell, il faut citer l'argument tel que:

git stash apply "stash@{0}"

... ou pour appliquer les modifications et supprimer de la réserve:

git stash pop "stash@{0}"

Sinon, sans les guillemets, vous pourriez obtenir cette erreur:

fatal: argument ambigu 'stash @': révision inconnue ou chemin d'accès absent de l'arborescence de travail.

jterry
la source
Apparemment, c'est la façon dont vous devez le faire lorsque vous utilisez également la coquille de poisson sur Mac OSX 10.11.
lps
8
git stash list

puis sélectionnez la réserve à appliquer et utilisez uniquement le numéro:

git stash apply 1
panthari
la source
2
Git Stash list 

La liste affichera tous les éléments cachés, par exemple: stash @ {0}:, stash @ {1}:, .., stash @ {n}:

Sélectionnez ensuite le nombre n qui désigne la cachette @ {n}:

git stash apply n 

for eg: git stash apply 1 will apply that particular stashed changes to the current branch
Harshavardhan reddy.
la source