DEV Community

Cover image for Git Avanzado: ¿Qué es git stash? 🔎
Cristian Fernando
Cristian Fernando

Posted on

Git Avanzado: ¿Qué es git stash? 🔎

Índice

  1. Introducción
  2. ¿Qué es git stash?
  3. Casos de uso
  4. Agregar al stash
  5. Listar el stash
  6. Recuperar el stash
  7. Borrar el stash
  8. Referencias
  9. Conclusiones

1. Introducción

Muchas veces tenemos interrupciones en nuestra jornada laboral, sea por reuniones, emergencias, hot fixes que solucionar, etc., es muy habitual y poco oportuno pero así es el mundo laboral real.

Afortunadamente git tiene una característica que nos puede ayudar en momentos así: el stash.

2. ¿Qué es git stash?

El stash es un espacio en memoria que es administrada por git para poder guardar nuestro trabajo actual de manera segura para posteriormente poder recuperarlo.

A manera de analogía es stash es como un cajón especial de tu escritorio donde puedes guardar todas tus herramientas y materiales de trabajo para enfocarte en una emergencia y luego recuperar todo ese material de ese "cajón" especial y continuar con tus actividades.

3. Casos de uso

Imagina que estás trabajando de manera esmerada y concentrada en el feature A de un proyecto y viene tu jefe con una emergencia y te pide que ahora dejes todo lo que estás haciendo y te concentres en solucionar un problema B. Usa el stash para guardar todo tu trabajo actual, arreglas el problema B y ahora recuperas tu trabajo del stash para seguir con tu feature A.

4. Agregar al stash

Para agregar nuestro trabajo actual al stash podemos ejecutar uno de los 2 comandos siguientes:

git stash
git stash save "mensaje"
Enter fullscreen mode Exit fullscreen mode

Recomiendo usar el 2do puesto que nos permite agregar un mensaje descriptivo para cada stash.

En este ejemplo estaba agregando información al REAME.md de mi proyecto de pokémones en Proyect IDX de Google y use el stash para guardar esos cambios.

stash save

5. Listar el stash

Para listar todo nuestro stash podemos ejecutar:

git stash list
Enter fullscreen mode Exit fullscreen mode

Este comando nos mostrará una lista con todos los ítems del stash.

Es importante señalar que el stash se administra con una pila como estructura de datos, por lo que el último stash en ser agregado será el primero que lo veamos.

Nuevamente en nuestro ejemplo, ejecuto git stash list para ver todas mis entradas al stash, notar que cada stash se lista con un {id} empezando desde 0.

img

6. Recuperar el stash

Para recuperar items de nuestro stash tenemos 2 maneras:

git stash pop
Enter fullscreen mode Exit fullscreen mode

Este comando recupera el último ítem de nuestro stash y luego procede a eliminarlo.

En nuestro ejemplo:

pop

Recuperamos nuestro contenido en el README.md, por ello tenemos cambios sin trackear y mostramos que efectivamente el item del stash fue eliminado: Dropped refs/stash@{(2cf8688f99c733ea12e11e65cefe74920686b0aa)

Es una buena práctica eliminar del stash cada ítem que ya recuperamos, esto para mantener limpio nuestro stash.

Otra manera de recuperar un ítem del stash es:

git stash apply
git stash apply stash@{2}
Enter fullscreen mode Exit fullscreen mode

git stash apply recuperar el último ítem del stash pero no lo eliminan como hacía pop, mientras que git stash apply stash@{2} recupera el ítem 2 del stash y tampoco lo elimina (podemos usar esto para recuperar cualquier item de nuestro stash en caso de tener varios)

Recuerda que git stash apply solo recupera el stash más no lo borra.

apply

7. Borrar el stash

Para borrar un item del stash podemos hacer:

git stash drop stash@{n}
Enter fullscreen mode Exit fullscreen mode

Esto elimina el item que queramos solo pasándole el id.

Si queremos eliminar todo el stash podemos hacer:

git stash drop
git stash clear
Enter fullscreen mode Exit fullscreen mode

Cualquiera de estos dos comandos borra todo el stash.

drop

9. Referencias

10. Conclusiones

El stash es un concepto muy importante a comprender para aplicar en casos de emergencia en nuestro proyectos de desarrollo. Otra solución ante el mismo problema sería crear una rama separada pero me parece que es mejor si aprovechamos estas características de git a nuestro favor y las usamos con las intenciones para las que fueron construidas.

Ahora ya sabes que la próxima vez que tengas una emergencia a resolver tenemos el stash como nuestro mejor aliado.


Otros post de mi autoría que te pueden interesar:

Top comments (0)