2. GIT stash
GIT stash
El git stash es un comando que se utiliza cuando necesitemos guardar cambios temporalmente en la rama donde estamos trabajando para movernos a cualquier otra rama a realizar cambios de forma rápida.
Vamos a simular un ejemplo real:
Lo primero que debo hacer es, una bifurcación en la rama main que se llame rama-nueva.
- Ejecutamos el comando git branch nueva-rama para crear una nueva rama de trabajo partiendo de
main. - Ejecutamos el comando git switch nueva-rama para posicionar en la rama que quiero trabajar.
- Mientras trabajo en la nueva rama, me piden que debo hacer un cambio rapido en la rama principal
main. - Si no comiteamos los cambios en la
nueva-ramaantes de ir amain, lo que va suceder es que vamos a llevar esos cambios sin comitear a la ramamain. Cosa que no queremos hacer, ni es el flujo de trabajo correcto llevar esos cambios a la ramamain. Esto crearia confusión y lo que qeremos es tenerlos por separado. - El problema radica en que recien empezamos a trabajar en la rama
nueva-ramay no es momento correcto de comitear los cambios todavia. Cada vez que enviamos uncommit, estamos creando una referencia en el tiempo que prodrías querer revertir en el futuro y todavia no tenemos listo esa versión. Aquí es donde (git stash) entra en acción. - Suponiendo que seguimos posicionados en la rama
nueva-rama, sigamos el siguiente paso. - Ejecutamos el comando git stash para guardar los cambios temporalmente sin agregar archivos al historial ni comitear.
- Ejecutamos el comando git switch main para posicionar en la rama
mainy hacer los cambios solicitados. - Cuando aya terminado los cambios en
main, puedo volver de nuevo anueva-ramay traer los cambios temporales que habia guardado. Para ello, - Ejecutamos el comando git stash list para mostrar el cambio guardado temporalmente (WIP significa trabajo en proceso).
- Ejecutamos el comando git stash show para mostrar cuales fueron los cambios del código.
- Ejecutamos el comando git stash apply para traer los cambios guardados temporalmente de vuelta.
Importante:
Una vez hayamos traido los cambios temporales de vuelta, seguira estando en temporales por lo que hay que borrar ese elemento oculto porque nos puede generar confusión y problemas en el futuro. Para ello, siga el siguiente paso.
Borrar cambios temporales guardados:
- Ejecutamos el comando git stash clear para borrar todos los cambios temporales guardados.
- Ejecutamos el comando git stash list para verificar que no quedo ningun cambio temporal guardado.
Así se muestra una lista stash:
Comandos stash básicos:
- git stash Guarda los cambios de la rama actual en el
stash. - git stash save "mensaje" Guarda los cambios de la rama actual en el
stashcon un mensaje. - git stash drop Elimina el último
stash. - git stash clear Elimina todos los cambios temporales guardados en
stash. - git stash list Muesta todos los cambios temporales guardados en el
stash. - git stash show Muetra un resumen de los cambios realizados en el código.
- git stash apply Aplica los cambios en la rama actual y deja una copia en el
stash. - git stash apply stash@{n} Aplica el
stashmediante su número dentro de las llaves y deja una copia en elstash. - git stash pop stash@{num_stash} Aplicar los cambios de un
stashespecífico y elimina delstash. - git stash apply NOMBRE-DEL-STASH Aplica los cambios y deja una copia en el
stash. - git stash pop NOMBRE-DEL-STASH Aplica los cambio y elimina los archivos del
stash. - git stash drop NOMBRE-DEL-STASH Elimina los cambios guardados en
stashsin aplicarlos.