2009-12-15 5 views
274

J'espère vraiment que quelqu'un peut vous conseiller.git stash applique la version

J'ai 2 branches master | conception

Travailler dans la conception J'ai fait une cachette et commuté au maître, fait quelques ajustements. Redémarré à la conception et fait une cachette ne s'applique que pour perdre tous mes changements dans la branche de conception.

J'espère que tout mon travail est dans une cachette que je n'ai pas effacé ou enlevé ceux-ci.

Si je fais une liste de planque pour avoir 4 résultats:

[email protected]{0}: WIP on design: f2c0c72... Adjust Password Recover Email 
[email protected]{1}: WIP on design: f2c0c72... Adjust Password Recover Email 
[email protected]{2}: WIP on design: eb65635... Email Adjust 
[email protected]{3}: WIP on design: eb65635... Email Adjust 

Si je tente 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 planque spécifique?

J'espère que quelqu'un peut vous aider !!

+8

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] (http://stackoverflow.com/a/40543440/6309). – VonC

Répondre

413

Les clés dans la mémoire sont en fait les [email protected]{n} sur la gauche. Donc, essayez git stash apply [email protected]{0} etc (notez que dans certains shells vous devez citer "[email protected]{0}", comme zsh et poisson).

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

+0

Fantastique J'ai trouvé mes fichiers perdus. Merci beaucoup! – Lee

+68

Juste une note que sur certains shells, stash @ {n} doit être cité. – Senjai

+5

Pour ceux d'entre vous qui ne savent pas. Pour obtenir votre liste de cachette c'est '' git stash list' '' –

184

Pour appliquer une planque et le retirer de la liste de Stash, exécutez:

git stash pop [email protected]{n} 

Pour appliquer une planque et de le conserver dans le cache de Stash, exécutez:

git stash apply [email protected]{n} 
+7

C'est génial, merci de faire la distinction entre les deux options. Je viens de l'essayer et il semble que si vous déposez une cachette de la branche a sur la branche b, la cachette restera dans la cachette cache. Je suppose que ce serait ainsi vous avez toujours l'option de pop/application de la cachette à la branche-a à une date ultérieure. J'espère vraiment que cela a du sens. Pratique! – longda

+34

Pour PowerShell: 'stit pop stash pop 'stash @ {n}" ' – ankitjaininfo

+0

PowerShell est content avec des accolades entre guillemets/guillemets simples:' git stash apply stash @ "{n}" ' – m1kael

34

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

git stash apply "[email protected]{0}" 

... ou pour appliquer les modifications et retirer de t il planque:

git stash pop "[email protected]{0}" 

Sinon sans les guillemets que vous pourriez obtenir cette erreur:

fatal: ambiguous argument '[email protected]': unknown revision or path not in the working tree.

+0

Apparemment, c'est aussi ce que vous devez faire lorsque vous utilisez un shell de poisson sous Mac OSX 10.11. – lps

17

Depuis la version 2.11, il est assez facile, vous pouvez utiliser le numéro de pile de N au lieu de dire "[email protected]{n}" . Alors maintenant, au lieu d'utiliser:

git stash apply "[email protected]{n}" 

Vous pouvez taper:

git stash apply n 

Par exemple, dans votre liste:

[email protected]{0}: WIP on design: f2c0c72... Adjust Password Recover Email 
[email protected]{1}: WIP on design: f2c0c72... Adjust Password Recover Email 
[email protected]{2}: WIP on design: eb65635... Email Adjust 
[email protected]{3}: WIP on design: eb65635... Email Adjust 

Si vous souhaitez appliquer [email protected]{1} vous pourriez type:

git stash apply 1 

Sinon, vous pouvez l'utiliser même si vous avez quelques changements dans votre répertoire depuis 1.7.5.1, mais vous devez être sûr que le Stash ne va pas écraser vos modifications du répertoire de travail si elle ne 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 a refusé de travailler s'il y avait un changement dans le répertoire de travail.


notes de version Git:

The user always has to say "[email protected]{$N}" when naming a single element in the default location of the stash, i.e. reflogs in refs/stash. The "git stash" command learned to accept "git stash apply 4" as a short-hand for "git stash apply [email protected]{4}"

git stash apply" used to refuse to work if there was any change in the working tree, even when the change did not overlap with the change the stash recorded

Questions connexes