741 votes

git stash apply version

J'ai 2 branches : master | design

En travaillant sur le dessin, j'ai fait un stash et je suis passé au master, j'ai fait quelques ajustements. Je suis retourné au design et j'ai fait une stash apply pour perdre toutes mes modifications dans la branche design.

J'espère que tout mon travail se trouve dans une réserve, car je ne l'ai pas nettoyée ou supprimée.

Si je fais une liste de réserve, 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'essaie git stash apply f2c0c72 Je reçois une erreur :

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

Comment puis-je appliquer une réserve spécifique ?

43 votes

Notez que vous disposez désormais (Q4 2016, Git 2.11) de la syntaxe git stash apply 0 (au lieu de git stash apply stash@{0} ). Voir aussi ma réponse ici .

1249voto

araqnid Points 33350

Les clés de la cachette sont en fait les stash@{n} à gauche. Essayez donc :

git stash apply stash@{0}

(il est à noter que dans certaines coquilles, il est nécessaire de citer "stash@{0}" comme zsh, fish et powershell).

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

git stash apply "stash@{n}"

Vous pouvez taper :

git stash apply n

Pour obtenir la liste des réserves :

git stash list

En effet stash@{0} est une révision dans git vers laquelle vous pouvez basculer... mais git stash apply ... devrait trouver comment DTRT pour l'appliquer à votre emplacement actuel.

109 votes

Notez simplement que sur certains shells, stash@{n} doit être cité.

9 votes

Autre conseil : vous pouvez faire par exemple gitk stash@{0} pour montrer les changements que vous avez apportés à une réserve particulière.

11 votes

Les utilisateurs de zsh doivent mettre des guillemets doubles, par exemple git stash apply "stash@{0}"

278voto

Dan Points 1417

Pour appliquer une réserve et la supprimer de la liste des réserves, exécutez la commande suivante :

git stash pop stash@{n}

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

git stash apply stash@{n}

8 votes

C'est très bien, merci de faire la distinction entre les deux options. Je viens d'essayer et il semble que si vous transférez une réserve de la branche A à la branche B, la réserve restera dans le cache de réserve. Je suppose que c'est pour que vous ayez toujours la possibilité d'ouvrir/appliquer la réserve à la branche-a à une date ultérieure. J'espère que cela a du sens. Pratique !

45 votes

Pour PowerShell : git stash pop "stash@{n}"

1 votes

PowerShell se contente d'accolades entre guillemets ou entre guillemets simples : git stash apply stash@"{n}"

76voto

Pau Points 4642

Depuis la version 2.11, c'est assez facile, vous pouvez utiliser le numéro de pile N au lieu de dire "stash@{n}" . Ainsi, 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 appliquer stash@{1} vous pourriez taper :

git stash apply 1

Sinon, vous pouvez l'utiliser même si vous avez modifié votre répertoire depuis la version 1.7.5.1, mais vous devez vous assurer que le stash 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 en cas de changement du répertoire de travail.


Notes de version Git :

L'utilisateur doit toujours dire "stash@{$N}" lorsqu'il nomme un seul élément dans l'emplacement par défaut de la réserve, c'est-à-dire les reflogs dans refs/stash. La virgule de La commande "git stash" a appris à accepter "git stash apply 4" en tant que pour "git stash apply stash@{4}"

git stash apply" refusait de fonctionner s'il y avait un changement dans l'arbre de travail. même si le changement n'empiétait pas sur le changement que l'option "git stash apply" permettait d'appliquer. stash enregistrait

44voto

jterry Points 2256

Si l'on se trouve sur une machine Windows et que l'on utilise PowerShell, il faut citer l'argument tel que :

git stash apply "stash@{0}"

...ou pour appliquer les changements et les retirer de la réserve :

git stash pop "stash@{0}"

Sinon, sans les guillemets, vous risquez d'obtenir cette erreur :

fatal : argument ambigu 'stash@' : révision inconnue ou chemin ne se trouvant pas dans l'arbre de travail.

28voto

git stash list 

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

Sélectionnez ensuite le nombre n qui correspond à stash@{n} :

git stash apply n 

par exemple :

git stash apply 1 

appliquera ces modifications particulières à la branche courante

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X