¿Cómo nombro y recupero un alijo de Git por nombre?

Resuelto Suan asked hace 12 años • 0 respuestas

¿Cómo guardo/aplico un alijo con un nombre? No quiero tener que buscar su número de índice en git stash list. Lo intenté git stash save "my_stash_name", pero eso solo cambia la descripción del alijo y lo correspondiente git apply "my_stash_name"no funciona.

Suan avatar Jun 30 '12 04:06 Suan
Aceptado

Para guardar un alijo con un mensaje:

git stash push -m "my_stash_name"

Alternativamente (en desuso desde v2.16):

git stash save "my_stash_name"

Para enumerar alijos:

git stash list

Todos los alijos se almacenan en una pila.


Para hacer estallar (es decir, aplicar y soltar) el nenésimo alijo:

git stash pop stash@{n}

No es posible extraer (es decir, aplicar y soltar) un alijo por nombre ( consultegit stash pop la nota al pie 1).


Para aplicar el nenésimo alijo:

git stash apply stash@{n}

Para aplicar un alijo por nombre :

git stash apply stash^{/my_stash_name}

nota al pie-1:

  • Consulte la man git-stashsección sobre apply:

    A diferencia de pop, puede ser cualquier confirmación que parezca una confirmación creada mediante stash push o stash create.

  • Posible solución alternativa (probada en git versión 2.27 y 2.31):

    git stash pop $(git stash list --pretty='%gd %s'|grep "my_stash_name"|head -1|gawk '{print $1}')

Sri Murthy Upadhyayula avatar Mar 04 '2013 08:03 Sri Murthy Upadhyayula

git stash saveestá en desuso a partir de 2.15.x/2.16, en su lugar puede utilizargit stash push -m "message"

Puedes usarlo así:

git stash push -m "message"

donde "mensaje" es tu nota para ese alijo.

Para recuperar el alijo puedes utilizar: git stash list. Esto generará una lista como esta, por ejemplo:

stash@{0}: On develop: perf-spike
stash@{1}: On develop: node v10

Luego simplemente usas applydándole el stash@{index}:

git stash apply 1

Referencias a la página de manual de git stash

EssaidiM avatar Mar 29 '2018 15:03 EssaidiM

Si solo está buscando una forma liviana de guardar algunos o todos los cambios de su copia de trabajo actual y luego volver a aplicarlos más tarde a voluntad, considere un archivo de parche:

# save your working copy changes
git diff > some.patch

# re-apply it later
git apply some.patch

De vez en cuando me pregunto si debería usar alijos para esto y luego veo cosas como la locura anterior y estoy contento con lo que estoy haciendo :)

Pat Niemeyer avatar Nov 10 '2017 16:11 Pat Niemeyer

Puedes convertir un alijo en una rama si crees que es lo suficientemente importante:

git stash branch <branchname> [<stash>]

desde la página de manual:

Esto crea y verifica una nueva rama nombrada <branchname>a partir de la confirmación en la que se <stash>creó originalmente, aplica los cambios registrados en <stash>el nuevo árbol de trabajo e índice, luego descarta <stash>si se completa exitosamente. Cuando se da no <stash>, se aplica la última.

Esto es útil si la rama en la que ejecutó git stash saveha cambiado lo suficiente como para que git stash apply falle debido a conflictos. Dado que el alijo se aplica encima de la confirmación que era HEAD en el momento en que se ejecutó git stash, restaura el estado originalmente escondido sin conflictos.

Más adelante podrás cambiar la base de esta nueva rama a algún otro lugar que sea descendiente de donde estabas cuando la escondiste.

Adam Dymitruk avatar Jun 29 '2012 22:06 Adam Dymitruk