web-dev-qa-db-fra.com

git stash applique la version

J'ai 2 branches: master | conception

Travaillant dans le design, j'ai fait une cachette et suis passé au master, j'ai fait quelques ajustements. Retourné à la conception et fait un stash apply seulement pour perdre tous mes changements dans la branche de conception.

J'espère que tout mon travail est dans une réserve, car je n'ai ni effacé ni enlevé ces derniers.

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'essaie git stash apply f2c0c72 j'obtiens une erreur:

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

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

417
Lee

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

git stash apply stash@{0}

(notez que dans certains coquillages, 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 stash:

git stash list

En fait, stash@{0} est une révision en git dans laquelle vous pouvez passer à ... mais git stash apply ... devrait comprendre comment DTRT l'appliquer à votre emplacement actuel.

659
araqnid

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

git stash pop stash@{n}

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

git stash apply stash@{n}
225
Dan Loewenherz

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 voulez appliquer stash@{1}, vous pouvez taper:

git stash apply 1

Sinon, vous pouvez l'utiliser même si certaines modifications ont été apportées à votre répertoire depuis la version 1.7.5.1, mais vous devez être sûr que le cache n'écrasera pas les modifications apportées à votre répertoire de travail. Sinon, 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 modification du répertoire de travail.


Notes de publication de Git:

L’utilisateur doit toujours dire "cachette @ {$ N}" lorsqu'il nomme un seul élément à l’emplacement par défaut de la cachette, c’est-à-dire reflogue dans refs/stash. La commande "git stash" a appris à accepter "git stash apply 4" en abrégé 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 si le changement ne chevauchait pas avec le changement enregistré dans le stash

43
Pau

Si on est sur une machine Windows et dans PowerShell, on doit citer un argument tel que:

git stash apply "stash@{0}"

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

git stash pop "stash@{0}"

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

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

40
jterry
git stash apply n

puis sélectionnez la cachette à appliquer

git stash apply 1
2
panthari
Git Stash list 

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

Puis sélectionnez le nombre n qui désigne stash @ {n}:

git stash apply n 

for eg: git stash apply 1 will apply that particular stashed changes to the current branch
0