Siempre tuve la impresión de que se podía dar un nombre a un stash haciendo git stash save stashname
, que luego se podía aplicar haciendo git stash apply stashname
. Pero parece que en este caso todo lo que sucede es que "stashname" se utilizará como la descripción del stash.
¿No hay forma de nombrar un stash? Si no es así, ¿qué recomendaríais para conseguir una funcionalidad equivalente? Esencialmente tengo un pequeño stash que me gustaría aplicar periódicamente, pero no quiero tener que buscar siempre en git stash list
cuál es su número real de stash.
Así es como se hace:
git stash save "my_stash"
Donde "mi_almacén"
es el nombre del alijo.
Algunas cosas más útiles para saber: Todos los stashes se almacenan en una pila. Tipo:
git stash list
Esto hará una lista de todos tus alijos.
Para aplicar un alijo y eliminarlo de la pila de alijos, escriba:
git stash pop stash@{n}
Para aplicar un alijo y mantenerlo en la pila de alijos, escriba:
git stash apply stash@{n}
Donde n
es el índice del cambio almacenado.
Puedes convertir un alijo en una rama si crees que es lo suficientemente importante:
git stash branch <branchname> [<stash>]
de la página man:
Esto crea y comprueba una nueva rama llamada <branchname>
empezando por la confirmación en la que se creó originalmente el <stash>
, aplica los cambios registrados en <stash>
al nuevo árbol de trabajo e índice, y luego deja caer el <stash>
si se completa con éxito. Si no se da ningún "stash", se aplica el más reciente.
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 stash se aplica sobre la confirmación que era HEAD en el momento en que se ejecutó git stash, restaura el estado originalmente almacenado sin conflictos.
Más tarde puedes volver a basar esta nueva rama en algún otro lugar que sea descendiente de donde estabas cuando hiciste el stash.
Los stashes no están pensados para ser cosas permanentes como tú quieres. Probablemente sea mejor usar etiquetas en los commits. Construye la cosa que quieres almacenar. Haz un commit de ello. Crea una etiqueta para ese commit. Luego retrocede tu rama a HEAD^
. Ahora, cuando quieras volver a aplicar ese stash puedes usar git cherry-pick -n tagname
(-n
es --no-commit
).