El comando git stash te permite almacenar temporalmente (o guardar en un stash), los cambios que hayas efectuado en el código en el que estás trabajando para que puedas trabajar en otra cosa y, más tarde, regresar y volver a aplicar los cambios.
Guardar los cambios en stashes resulta práctico si tienes que cambiar rápidamente de contexto y ponerte con otra cosa, pero estás en medio de un cambio en el código y no tienes todo listo para confirmar los cambios.
Git stash lo puedes usar sin necesidad de crear una nueva rama o hacer un commit. Además, no pierdes tus cambios.
git stash: guarda los cambios temporalmente en memoria cuando no quieres hacer un commit aun
git stash save “mensaje”: guarda un stach con mensaje
git stash list: muestra la lista de cambios temporales
git stash pop: trae de vuelta los cambios que teníamos guardados en el ultimo stash
git stash apply stash@{n}: trae el stash que necesites con indicar su número dentro de las llaves
git stash drop: borra el ultimo stash
git stash clear: borra todos los stash
Cómo funciona el comando git stash
Para agregar los cambios al stash se utiliza el comando:
git stash
Podemos poner un mensaje en el stash, para así diferenciarlos en "git stash list" por si tenemos varios elementos en el stash. Esto con:
git stash save "mensaje identificador del elemento del stashed"
Ejemplo de uso de git stash
El stashed nos permite cambiar de rama o branch, hacer cambios, trabajar en otras cosas y, más adelante, retomar el trabajo con los archivos que teníamos en staging, pero que podemos recuperar, ya que los guardamos en el stash.
Por ejemplo:
$ git status
On branch master
Changes to be committed:newfile: style.cssChanges not staged forcommit:modified: index.html
$ git stash
Saved working directoryandindex state WIPonmaster: 5002d47 our newhomepageHEADisnowat5002d47 our newhomepage
$ git status
On branch master
nothingtocommit, working tree clean
Cómo ver los stash en git
Utiliza git stash pop. Este muestra los cambios guardados en el stash, también podemos mostrar los cambios de un stash determinado usando su índice que nos muestra el git stash.
El stashed se comporta como una stack de datos comportándose de manera tipo LIFO (del inglés Last In, First Out, «último en entrar, primero en salir»), así podemos acceder al método pop.
El método pop recuperará y sacará de la lista el último estado del stashed y lo insertará en el staging area, por lo que es importante saber en qué branch te encuentras para poder recuperarlo, ya que el stash será agnóstico a la rama o estado en el que te encuentres. Siempre recuperará los cambios que hiciste en el lugar que lo llamas.
Para recuperar los últimos cambios desde el stash a tu staging area utiliza el comando:
git stash pop
Para aplicar los cambios de un stash específico y eliminarlo del stash:
git stash pop stash@{<num_stash>}
Para retomar los cambios de una posición específica del stash puedes utilizar el comando:
git stash apply stash@{<num_stash>}
Donde el <num_stash> lo obtienes desde el git stash list
Cómo ver el listado de elementos en el stash
Para ver la lista de cambios guardados en stash y así poder recuperarlos o hacer algo con ellos podemos utilizar el comando:
git stash list
Retomar los cambios de una posición específica del Stash || Aplica los cambios de un stash específico.
Cómo crear una rama con el stash
Para crear una rama y aplicar el stash más reciente podemos utilizar el comando:
git stash branch <nombre_de_la_rama>
Si deseas crear una rama y aplicar un stash específico (obtenido desde git stash list) puedes utilizar el comando:
Al utilizar estos comandos crearás una rama con el nombre <nombre_de_la_rama>, te pasarás a ella y tendrás el stash especificado en tu staging area.
Cómo eliminar elementos del stash
Para eliminar los cambios más recientes dentro del stash (el elemento 0), podemos utilizar el comando:
git stash drop
Pero si, en cambio, conoces el índice del stash que quieres borrar (mediante git stash list) puedes utilizar el comando:
git stash drop stash@{<num_stash>}
Donde el <num_stash> es el índice del cambio guardado.
Si, en cambio, deseas eliminar todos los elementos del stash, puedes utilizar:
git stash clear
Consideraciones:
El cambio más reciente (al crear un stash) SIEMPRE recibe el valor 0 y los que estaban antes aumentan su valor.
Al crear un stash tomará los archivos que han sido modificados y eliminados. Para que tome un archivo creado es necesario agregarlo al staging area con git add [nombre_archivo] con la intención de que git tenga un seguimiento de ese archivo. O también utilizando el comando git stash -u (que guardará en el stash los archivos que no estén en el staging).
Al aplicar un stash este no se elimina, es buena práctica eliminarlo.
Contribución creada con los aportes de: David Behar y Daniel Cabrera Ramirez.
El stashed nos sirve para guardar cambios para después, Es una lista de estados que nos guarda algunos cambios que hicimos en Staging para poder cambiar de rama sin perder el trabajo que todavía no guardamos en un commit
Ésto es especialmente útil porque hay veces que no se permite cambiar de rama, ésto porque porque tenemos cambios sin guardar, no siempre es un cambio lo suficientemente bueno como para hacer un commit, pero no queremos perder ese código en el que estuvimos trabajando.
El stashed nos permite cambiar de ramas, hacer cambios, trabajar en otras cosas y, más adelante, retomar el trabajo con los archivos que teníamos en Staging pero que podemos recuperar ya que los guardamos en el Stash.
git stash
El comando git stash guarda el trabajo actual del Staging en una lista diseñada para ser temporal llamada Stash, para que pueda ser recuperado en el futuro.
Para agregar los cambios al stash se utiliza el comando:
git stash
Podemos poner un mensaje en el stash, para asi diferenciarlos en git stash list por si tenemos varios elementos en el stash. Ésto con:
git stash save "mensaje identificador del elemento del stashed"
Obtener elelmentos del stash
El stashed se comporta como una Stack) de datos comportándose de manera tipo LIFO (del inglés Last In, First Out, «último en entrar, primero en salir»), así podemos acceder al método pop.
El método pop recuperará y sacará de la lista el último estado del stashed y lo insertará en el staging area, por lo que es importante saber en qué branch te encuentras para poder recuperarlo, ya que el stash será agnóstico a la rama o estado en el que te encuentres, siempre recuperará los cambios que hiciste en el lugar que lo llamas.
Para recuperar los últimos cambios desde el stash a tu staging area utiliza el comando:
git stash pop
Para aplicar los cambios de un stash específico y eliminarlo del stash:
git stash pop stash@{<num_stash>}
Para retomar los cambios de una posición específica del Stash puedes utilizar el comando:
git stash apply stash@{<num_stash>}
Donde el <num_stash> lo obtienes desden el git stash list
Listado de elementos en el stash
Para ver la lista de cambios guardados en Stash y así poder recuperarlos o hacer algo con ellos podemos utilizar el comando:
git stash list
Retomar los cambios de una posición específica del Stash || Aplica los cambios de un stash específico
Crear una rama con el stash
Para crear una rama y aplicar el stash mas reciente podemos utilizar el comando
git stash branch <nombre_de_la_rama>
Si deseas crear una rama y aplicar un stash específico (obtenido desde git stash list) puedes utilizar el comando:
Al utilizar estos comandos crearás una rama con el nombre <nombre_de_la_rama>, te pasarás a ella y tendrás el stash especificado en tu staging area.
Eliminar elementos del stash
Para eliminar los cambios más recientes dentro del stash (el elemento 0), podemos utilizar el comando:
git stash drop
Pero si en cambio conoces el índice del stash que quieres borrar (mediante git stash list) puedes utilizar el comando:
git stash drop stash@{<num_stash>}
Donde el <num_stash> es el índice del cambio guardado.
Si en cambio deseas eliminar todos los elementos del stash, puedes utilizar:
git stash clear
Consideraciones:
El cambio más reciente (al crear un stash) SIEMPRE recibe el valor 0 y los que estaban antes aumentan su valor.
Al crear un stash tomará los archivos que han sido modificados y eliminados. Para que tome un archivo creado es necesario agregarlo al Staging Area con git add [nombre_archivo] con la intención de que git tenga un seguimiento de ese archivo, o también utilizando el comando git stash -u (que guardará en el stash los archivos que no estén en el staging).
Al aplicar un stash este no se elimina, es buena práctica eliminarlo.
Muchísimas gracias buen hombre
Mil gracias, se van directo a la carpeta favoritos.
==Aquí mis apuntes de Git Stash!==
Ya se me hacia raro no ver tu resumen :)
tus aportes deberían ser comentario fijado en las clases!
git stash : Guarda el trabajo actual de manera temporal. (Archivos modificados o eliminados)
git stash -u : Crea un stash con todos los archivos. (Añadiendo los creados Untracked)
git stash save "mensaje" : Crea un stash con el mensaje especificado.
git stash list : Permite visualizar todos los stash existentes.
git stash clear : Elimina todos los stash existentes.
git stash drop : Elimina el stash más reciente. El que tiene num_stash=0.
git stash drop stash@{num_stash} : Elimina un stash específico.
git stash apply : Aplica el stash más reciente. El que tiene num_stash=0.
git stash apply stash@{num_stash} : Aplica los cambios de un stash específico.
git stash pop : Aplica el stash más reciente y lo elimina. El que tiene num_stash=0.
git stash pop stash@{num_stash} : Aplica los cambios de un stash específico y elimina lo stash.
git stash branch nombre_de_rama : Crea una rama y aplica el stash mas reciente.
git stash branch nombre_de_rama stash@{num_stash} : Crea una rama y aplica el stash especificado.
Consideraciones:
El cambio más reciente (al crear un stash) SIEMPRE recibe el valor 0 y los que estaban antes aumentan su valor.
Al crear un stash tomará los archivos que han sido modificados y eliminados. Para que tome un archivo creado es necesario agregarlo al Staging Area con git add [nombre_archivo] con la intención de que git tenga un seguimiento de ese archivo, o también utilizando el comando git stash -u.
Al aplicar un stash este no se elimina, es buena práctica eliminarlo.
Git stash es como decirle a un cambio "No, no avances quedate conmigo un rato que yo te digo qué hacer".
-git stash: "Vení acá un segundo."
-git stash drop: Lo matas (F)
-git stash pop: Volvé a donde estabas (el cambio post-commit vuelve al archivo)
-git stash list: "Mira usuario, ese es el cambio que tengo guardado."
-git stash branch x: "Andá a esa rama de ahí. No al master porque no te quieren ahí por ahora ;("
Un resumen gracioso y muy útil al mismo tiempo, me encantó 😂😅
jajaja muy buen resumen
Si hacemos
git stash save "aqui va un mensaje para identificar el stash"
Podemos poner mensaje al stash, por si tenemos varios y asi diferenciarlos en git stash list.
De igual manera para llamar a un stash en particular y aplicarlo
git stash apply stash@{numero del stash}
El numero del stash lo podemos ver en la lista de stash
Muchas gracias amigo
Este aporte es super importante, gracias por compartir
git stash : Guardamos un estado temporal
git stash list : vemos la lista de stash que tenemos
git stash pop : restablecemos el estado que teniamos guardado
git stash branch (nombre de la rama ) : despues de haber creado un stash en memoria podemos crear una nueva rama con se cambio que esta en stash
git stash drop : borramos un stash ya guardado
Gracias. Git Stash es muy practico!
Gracias por los comandos.
Apuntes locos 😅
Crees que sea buena idea apuntar el proceso?
Yo lo hacía antes, pero tardaba demasiado y no eran tan necesarios para comprender un tema.
Aún lo hago, pero cuando quiero tener un ejemplo de uso de concepto nuevo que estoy aprendiendo
En su momento me ayudó mucho a comprender el funcionamiento de Git. Ahora tengo los apuntes en formato texto. Te los dejo por si quieres revisarlos Apuntes de Git y GitHub
También puedes poner un comentario al stash para no olvidarte que tenias
$ git stash save "Cambio titulo de cabecera a Ingles, porque puedo"------------------------------------------------------------------Saved working directory and index state On english-version:Cambio titulo de cabecera a Ingles, porque puedo
Luego al volver a la rama podemos ver lo que teníamos claramente:
$ git stash list
-----------------stash@{0}:On english-version:Cambio titulo de cabecera a Ingles, porque puedo
Hola @hermosotech, que útil, no sabía que existía la posibilidad de dejar estos mensajes. Es útil cuando estás probando varias cosas y las quieres dejar en stach
hola hermosotech, gracias por el aporte, esa no me la sabia y se ve que ayuda en mucho
Excelente explicación y si es un comando muy usado, hay una opción que acabo de leerla en la documentación oficial que me parece interesante y es el
git stash --patch
En donde el git te va mostrando la diferencia de cada uno de los archivos y te va preguntando que si lo quieres guardar en el stash. Es como mantener en memoria no todos los archivos modificados, pero si algunos de ellos y uno decide cuales.
gracias por el aporte voy a probarlo.
Muy bueno!!
GIT STASH
git stash = guarda los cambios que se han hecho al archivo (cambios en ustasged)
git stash list = muestra los stash disponibles (los cambios guardados)
git stash pop = te lanza el ultimo stash que guardaste y lo borra de la lista de stash
git stash pop indiceDelStash = te lanza el stash selececcionado por le indice // los stash se guardan desde arriba hacia abajo (lista) por lo tanto el ultimo stash guardado siempre sera del indice 0
git stash apply indice(opcional) = hace los mismo que git pop, pero no borra el stash seleccionado
git stash drop = elimina el ultimo stash agregado (stash indice 0)
git stash branch nombreDeLaRama = crea una nueva rama con el ultimo stash agregado // se necesita un stash guardado anteriormente //si nos vamos a otra rama el stash seguira en staging, no se sobreesriben con el checkout, es como si fuera un staging global
git stash branch nombreDeLaRama indiceDelStash = crea una nueva rama con el stash seleccionado por el indice
Git stash == ctrl + z
git stash Guarda los cambios temporalmente
git stash list Muestra la lista de cambios temporales
git stash pop Saca los cambios temporales y regresa los cambios al directorio de trabajo
git stash drop Elimina los cambios temporales
Guardar los cambios y ponerlos en una rama
git stash branch english-version Coloca el stash en una rama
git stash = guarda los cambios en memoria cuando no quieres hacer un commit aun
git stash save “mensaje” = guarda un stach con mensaje
git stash list = lista de todos stash
git stash pop = trae de vuelta los cambios que teniamos guardados en el ultimo stash
git stash apply stash@{n} = trae el stash que necesites con indicar su numero dentro de las llaves
git stash drop = borra el ultimo stash
git stash clear = borra todos los stash
Mi resumen de esta clase :D
muchas gracias por el aporte, un saludo
Tan bonito que es el git stash :heart:
Otro comando útil es: git stash apply stash@{0} así pueden seleccionar cual stash aplicar de todos los que se hayan guardado.
Pueden ver un poquito más sobre como funciona en este link
maravilloso gracias
<git stash>Guarda los cambios en memoria
<git stash list>Muestra la lista de los cambios que se han guardado
<git stash pop>Muestra los cambios
<git stash branch [rama]>Lleva los cambios a una nueva rama
<git stash drop>Borra los cambios guardados en stash
No vi este truco adicional en los otros aportes, entonces lo pongo.
Crear un stash quita los cambios, ¿pero qué pasa si los quiero conservar y simplemente usar el stash como un "copiado de portapapeles"?
Para crear un stash sin perder los cambios:
Agregar a staging los archivos con los cambios que me interesan
Realizar git stash --keep-index
Muy buen truco
Se pueden tener varios stash a partir de un mismo commit:
Y el comando stash pop también sirve para seleccionar alguno de estos:
$ git stash pop stash@{1}
Hay que tener en cuenta que al hacer esto, hay un traslado de stash en git stash list y el que era el stash@{2} pasa a ser stash@{1}
Y para ver la diferencia entre el stash y el último commit sin tener que seleccionarlo con pop se puede usar git stash show.
Por ejemplo con el stash@{2}
> git stash show -p stash@{2}
Lo que guardo es stash es en ram o puedo apagar la laptop e irme a almorzar tranquilo guardando con Stash ?
Todo es guardado en disco en la carpeta .git así que puedes ir a almorzar tranquilo :D
Git Stash se guarda en tu disco, por lo que si apagas tu computadora y la vuelves a encender, aún tendrás los que pusiste Stash.