2009-12-15 29 views
274

Realmente espero que alguien pueda aconsejar.git stash aplicar la versión

Tengo 2 sucursales master | diseño

Trabajar en el diseño que hizo un alijo y pasó a dominar, hizo algunos ajustes. Volví al diseño e hice un escondite solo para perder todos mis cambios en la rama de diseño.

estoy esperando todo mi trabajo está dentro de un alijo ya que no he limpiado o eliminado estos.

Si hago una lista alijo puedo obtener los resultados: 4

[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 intento git stash apply f2c0c72 estoy consiguiendo un error:

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

¿Cómo puedo aplicar un alijo específico?

Espero que alguien pueda ayudar !!

+8

Tenga en cuenta que ahora (Q4 2016, Git 2.11) la sintaxis 'git stash apply 0' (en lugar de' git stash apply stash @ {0} '). Ver [mi respuesta aquí] (http://stackoverflow.com/a/40543440/6309). – VonC

Respuesta

413

las llaves en el alijo son en realidad los [email protected]{n} elementos de la izquierda. Por lo tanto, intente con git stash apply [email protected]{0} etc. (tenga en cuenta que en algunos shells debe citar "[email protected]{0}", como zsh y fish).

De hecho, stash @ {0} es una revisión en git que puede cambiar a ... pero git stash apply ... debe averiguar cómo aplicar DTRT a su ubicación actual.

+0

Fantástico Encontré mis archivos perdidos. ¡Muchas gracias muchas veces! – Lee

+68

Solo una nota que en algunas shells, stash @ {n} debe ser citado. – Senjai

+5

Para aquellos de ustedes que no saben. Para obtener su lista secreta es 'git stash list' –

184

Para aplicar un alijo y quitarlo de la lista alijo, ejecute:

git stash pop [email protected]{n} 

Para aplicar un alijo y guardarla en la memoria caché escondite, ejecute:

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

Esto es genial, gracias por distinguir entre las dos opciones. Acabo de probar esto y parece que si sacas un alijo de la rama-a en la rama-b, el alijo permanecerá en la memoria caché. Supongo que sería así que todavía tienes la opción de pop/aplicar el alijo a branch-a en una fecha futura. Realmente espero que tenga sentido. ¡Práctico! – longda

+34

Para PowerShell: 'git stash pop" stash @ {n} "' – ankitjaininfo

+0

PowerShell está contento con solo llaves entre comillas/comillas simples: 'git stash apply stash @" {n} "' – m1kael

34

Si uno está en una máquina Windows y en PowerShell, hay que citar el argumento como por ejemplo:

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

... o para aplicar los cambios y eliminar de t que esconder:

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

De lo contrario, sin las comillas es posible obtener este error:

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

+0

Aparentemente, así es como tienes que hacerlo cuando usas una concha de pescado en Mac OSX 10.11 también. – lps

17

Desde la versión 2.11, que es bastante fácil, puede utilizar el número de pila N en lugar de decir "[email protected]{n}" . Así que ahora en lugar de uso:

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

Puede escribir:

git stash apply n 

Por ejemplo, en su lista:

[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 desea aplicar [email protected]{1} usted podría tipo:

git stash apply 1 

De lo contrario, se puede utilizar incluso si tiene algunos cambios en su directorio desde 1.7.5.1, pero hay que asegurarse de que el escondite no se sobreponen a sus cambios en el directorio de trabajo si lo hace obtendrá una de error:

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

en versiones anteriores a 1.7.5.1, se negó a trabajar si hubo un cambio en el directorio de trabajo.


Git notas de la versión:

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

Cuestiones relacionadas