git-stash-guardar-temporalmente

El almacenamiento temporal git stash

  • 4 min

El comando git stash es un área de almacenamiento temporal donde Git guarda las modificaciones de tu directorio de trabajo que aún no están listas para integrarse en un commit.

Imagina que estás en medio de una tarea compleja en tu rama feature. Tienes archivos a medio editar, el código no compila y todo está “patas arriba”.

Entonces, te llega un aviso: “¡Bug crítico! Hay que arreglarlo YA”. Tienes un problema:

  1. No puedes hacer commit porque tu código está roto y sucio.
  2. No puedes hacer switch a la rama hotfix porque Git no te deja cambiar de rama con archivos modificados que entrarían en conflicto.

¿Qué haces? ¿Borras tu trabajo? ¿Haces un commit basura llamado “wip”, cambias a hotfix y luego vuelves? (que tampoco sería la mala opción).

Para estas circustancias Git tiene un arma secreta, el bolsillo temporal de Git: git stash.

¿Qué es el Stash?

El Stash (escondite/reserva) es una zona de almacenamiento temporal donde puedes “aparcar” tus cambios actuales.

Piensa en ello como un Portapapeles gigante dentro de Git.

Cuando ejecutas git stash, Git coge todos tus cambios del Working Directory y del Staging Area, los empaqueta y los guarda en una zona separada.

El resultado es que tu directorio de trabajo queda limpio (como si acabaras de hacer un commit), permitiéndote cambiar de rama sin problemas.

Comandos básicos

Para guardar todo lo que tienes a medias, simplemente ejecuta:

git stash
Copied!

Verás un mensaje tipo Saved working directory and index state....

Si haces un git status ahora, verás que todo está limpio. Ya puedes irte a la rama main, arreglar el bug, y volver.

Una vez has terminado la urgencia y vuelves a tu rama, quieres recuperar tus cosas. El comando es:

git stash pop
Copied!

Esto hace dos cosas:

  1. Aplica los cambios guardados en tu directorio de trabajo.
  2. Elimina esos cambios de la pila del stash (lo vacía).

Si quieres aplicar los cambios pero mantener una copia en el stash (por seguridad o para aplicarlo en varias ramas), usa git stash apply en lugar de pop.

El problema de los archivos Untracked

Por defecto, git stash solo guarda los archivos que Git ya conoce (Tracked). Ignora los archivos nuevos (Untracked).

Para guardar absolutamente todo, incluidos los archivos nuevos, debes usar la opción -u (include untracked):

git stash -u
Copied!

Limpiando el Stash

Si abusas del stash, acabarás con una lista llena de basura. Puedes borrar Stashes,

  • Borrar el último stash:
git stash drop
Copied!
  • Borrar uno específico:
git stash drop stash@{3}
Copied!
  • Borrar TODO
git stash clear
Copied!