¿Cómo nombro y recupero un alijo de Git por nombre?
¿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.
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 n
ené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 n
ené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-stash
sección sobreapply
: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}')
git stash save
está 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 apply
dándole el stash@{index}
:
git stash apply 1
Referencias a la página de manual de git stash
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 :)
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 save
ha 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.