¿Cómo Git alijo pop alijo específico en 1.8.3?

290

Acabo de actualizar Git. Estoy en Git versión 1.8.3.

Esta mañana traté de sacar un cambio 1 en lo profundo de la pila.

Corrí git stash pop stash@{1}y obtuve este error.

fatal: argumento ambiguo 'stash @ 1': revisión desconocida o ruta no en el árbol de trabajo. Use '-' para separar las rutas de las revisiones, así: 'git [...] - [...]'

He intentado más de 20 variaciones en esto, así como usar en applylugar de popsin éxito. Que ha cambiado ¿Alguien más se encuentra con esto?

Jesse Atkinson
fuente
2
¿Intentaste escapar de los {}?
AlexDev
20
Con Git 2.11 (Q4 2016), ahora puede usar git stash pop 1: vea mi respuesta a continuación
VonC

Respuestas:

359
git stash apply n

funciona a partir de git versión 2.11

Respuesta original, posiblemente ayudando a depurar problemas con la sintaxis anterior que involucra escapes de shell:

Como se señaló anteriormente, las llaves pueden requerir escape o comillas dependiendo de su sistema operativo, shell, etc.

Consulte " stash @ {1} is ambiguous? " Para obtener algunos consejos detallados de lo que puede estar funcionando mal y cómo solucionarlo en varios shells y plataformas.

git stash list
git stash apply stash@{n}

git stash aplica la versión

Bob Gilmore
fuente
15
Mi único inconveniente con esta respuesta es que la pregunta pregunta cómo hacer popun alijo específico y este comando applyes el alijo en lugar de reventarlo. La diferencia es que un pop aplica el alijo al código y elimina el alijo en sí.
Grant Humphries
No funciona para mi Obteniendo error "opción desconocida: -encodedCommand"
Yuvraj Patil
14
Desde la versión 2.11 puede escribir: git stash apply n
Dwhitz
Actualice su respuesta, es ahoragit stash apply n
Hafiz Temuri
179

Necesitas escapar de las llaves:

git stash pop stash@\{1\}
Vasiliy
fuente
78

Si desea asegurarse de no tener que lidiar con comillas para la sintaxis stash@{x}, use Git 2.11 (Q4 2016)

Ver commit a56c8f5 (24 de octubre de 2016) por Aaron M Watson ( watsona4) .
(Fusionada por Junio ​​C Hamano - gitster- en commit 9fa1f90 , 31 oct 2016)

stash: permite que las reservas sean referenciadas solo por índice

En lugar de hacer referencia a " stash@{n}" explícitamente, haga posible simplemente hacer referencia a " n".
La mayoría de los usuarios solo hacen referencia a las reservas por su posición en la pila de reservas (a lo que me refiero aquí como "índice").

La sintaxis para el alijo típico ( stash@{n}) es un poco molesto y fácil de olvidar, y a veces difícil de escapar correctamente en un script .

Debido a esto, es deseable la capacidad de hacer cosas con el alijo simplemente haciendo referencia al índice.

Entonces:

git stash drop 1
git stash pop 1
git stash apply 1
git stash show 1
VonC
fuente
55
¡Gracias! Esta es probablemente la respuesta más relevante para cualquiera que venga aquí en 2019.
Aaron Frary
52

En Windows Powershell ejecuto esto:

git stash apply "stash@{1}"
Robert Brooker
fuente
2
También funciona en Ubuntu Linux
Bouke Versteegh
también funciona en Mac OS X. Me gusta más que escapar de caracteres individuales.
Félix Gagnon-Grenier
16

Como señaló Robert, las comillas podrían ser el truco para usted:

git stash pop stash@"{1}"
owenmck
fuente
12

Si ninguno de los anteriores funciona, las comillas alrededor del alijo podrían funcionar para usted:

git stash pop "stash@{0}"
Kenan
fuente
4

Tengo 2.22 instalado y esto funcionó.

git stash pop --index 1
markg
fuente
No funciona. $ Git stash pop - índice 1 fatal: argumento ambiguo '1': revisión desconocida o ruta no en el árbol de trabajo. Use '-' para separar las rutas de las revisiones, así: 'git <comando> [<revisión> ...] - [<archivo> ...]'
Dave Doga Oz
2

La versión 2.11+ usa lo siguiente:

git stash list

git stash apply n

n es el número oculto @ {12}

kumar viril
fuente
1

Primero revise la lista: -

git stash list

copie el índice que desea que aparezca en la lista de ocultación

git stash pop stash@{index_number}

p.ej.:

git stash pop stash@{1}
Jabbi Syed
fuente