Git stash

Vamos a aprender un excelente recurso el cual nos va a ser de mucha utilidad al trabajar en git y necesitemos movernos a través de nuestras ramas. Algo muy común en el dia a dia de un desarrollador.
Te pasa que estas trabajando una funcionalidad en una determinada rama pero quieres ver cambios en otra rama? pero no quieres llevarte los cambios que tienes en tu rama actual hacia la otra BRANCH o bien git te menciona que no puedes moverte sin hacer antes un commit? podriamos pensar, Ok, haré un commit y listo. Esto sería ideal, pero que ocurre si no tienes los cambios listos aun?
Es aquí donde el comando STASH juega un papel clave. veamos entonces:
Que es el STASH
El Stash es un almacén temporal que tiene forma de pila

ya que los cambios de tu directorio se van apilando para estar disponibles luego y ser recuperados.

Acordemos entonces que: git stash es un almacén temporal para cambios que no queremos commitear pero tampoco queremos perder
Guardar cambios en el stash
- todos los cambios que pueden ser guardados en el
stashson aquellos que no han sido commiteados, esto incluye incluso los que ya estan en el stage área.
Imaginemos que tenemos un repositorio, el cual posee un commit hecho previamente, luego de esto hemos modificado el archivo index.js

y ahora quiero moverme a otra rama para poder trabajar en otra cosa, pero no quiero perder estos cambios. Es aquí donde podemos poner los cambios en el stash

de esta manera hemos creado nuestro primer almacén temporal, volvamos a ejecutar git status y veamos que ya no tenemos cambios en el área de trabajo

para asegurarnos que realmente guardamos nuestros cambios y no han sido descartados podemos hacer uso del siguiente comando
git stash list

Importante
todos los archivos que han sido creados por primera vez el cual nunca ha sido incluido en un commit, git lo ignorara al almacenar en el stash debido a que git stash solo almacena ficheros modificados Hay que tener cuidado con ello
- Aquí un ejemplo

Stash con descripción
Para poder agregar una descripción a nuestro stash podemos indicarla de la siguiente manera
git stash -m "My comment"

ahora podemos usar nuevamente git stash list y ver que nuestro stash posee una descripción más clara para que podamos identificarlo facilmente cuando tengamos que recuperar ese cambio

pero aquí surge la duda, como puedo recuperar mi cambio?
Recuperando cambios del stash
para poder recuperar los cambios de la pila temporal vamos a utilizar
git stash pop

de esta manera volvemos a tener los cambios en nuestro directorio de trabajo, listos para continuar donde los dejamos
considero es importante entender que los cambios se van guardando como lo describe la siguiente imagen

debido a que si nosotros ejecutamos git stash pop siempre nos retornara el último stash que fue almacenado, si deseamos acceder a un stash especifico tenemos entonces que especificarlo de la siguiente manera
git stash pop stash@{numero_del_stash}

Esto puede ser de utilidad si queremos recuperar algun stash que este apilado varios stash atras.

