Índice
- Introducción
- ¿Qué es git stash?
- Casos de uso
- Agregar al stash
- Listar el stash
- Recuperar el stash
- Borrar el stash
- Referencias
- 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"
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.
5. Listar el stash
Para listar todo nuestro stash podemos ejecutar:
git stash list
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.
6. Recuperar el stash
Para recuperar items de nuestro stash tenemos 2 maneras:
git stash pop
Este comando recupera el último ítem de nuestro stash y luego procede a eliminarlo.
En nuestro ejemplo:
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}
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.
7. Borrar el stash
Para borrar un item del stash podemos hacer:
git stash drop stash@{n}
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
Cualquiera de estos dos comandos borra todo el stash.
9. Referencias
- https://git-scm.com/docs/git-stash
- https://www.atlassian.com/git/tutorials/saving-changes/git-stash
- https://www.freecodecamp.org/espanol/news/git-stash-explicado/
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:
![duxtech](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F391281%2Ffe9f8985-2f7e-4614-af22-73b275663b9a.jpg)
Top comments (0)