← Git

Flujos y buenas prácticas

¿Qué es `git stash` y cuándo lo usarías?

Ver respuesta — intenta responderla en voz alta primero

git stash guarda temporalmente tus cambios sin commitear (los del working directory y staging) y deja tu directorio limpio, como en el último commit. Lo usas cuando necesitas cambiar de contexto de golpe (por ejemplo, arreglar un bug urgente en otra rama) pero tu trabajo actual aún no está listo para un commit.

Estás a medias de una feature, con cambios sin terminar, y de repente hay que arreglar algo urgente en otra rama. No quieres commitear código incompleto, pero Git no te deja cambiar de rama con cambios en conflicto. Solución: git stash.

git stash toma tus cambios pendientes, los guarda en una pila (stack) aparte y limpia tu working directory. Luego puedes cambiar de rama, hacer lo urgente, volver y recuperar tus cambios con git stash pop.

  • git stash: guarda y limpia.
  • git stash list: ve qué tienes guardado.
  • git stash pop: recupera el último stash y lo borra de la pila.
  • git stash apply: recupera pero lo conserva en la pila.
# Tienes cambios a medias y necesitas cambiar de rama urgente
git stash
# Salida: Saved working directory and index state WIP on feature: ...
# Tu working directory queda limpio

# Cambias de rama, haces lo urgente, vuelves
git switch main
# ...arreglo urgente, commit, push...
git switch feature

# Recuperas tus cambios guardados
git stash pop
# Vuelven tus cambios y el stash se elimina de la pila

# Ver la lista de stashes guardados
git stash list
# stash@{0}: WIP on feature: 1a2b3c4 ...

# Guardar con un mensaje descriptivo
git stash push -m "formulario a medias"

# Incluir tambien archivos untracked (nuevos)
git stash -u

Olvidar que un git stash normal no incluye archivos untracked (nuevos, sin git add previo); para incluirlos hay que usar git stash -u. Otro error es acumular muchos stashes sin nombre y luego no saber cuál es cuál (por eso conviene usar -m con un mensaje). También, confundir pop (recupera y borra) con apply (recupera y conserva).

"git stash guarda temporalmente mis cambios sin commitear y deja el working directory limpio. Lo uso cuando estoy a medias de algo y me cae un bug urgente en otra rama: no quiero commitear código incompleto, así que hago stash, cambio de rama, resuelvo lo urgente, vuelvo y hago git stash pop para recuperar mi trabajo. Uso pop para recuperar y borrar, o apply para conservarlo, y -u si quiero incluir archivos nuevos."

Reto rápido

Hiciste git stash, pero tienes un archivo nuevo notas.txt que nunca añadiste a Git. Al hacer stash notas que notas.txt sigue ahí. ¿Por qué?

Ver respuesta

Porque git stash por defecto no incluye archivos untracked (nuevos, sin seguimiento). Solo guarda cambios de archivos ya rastreados. Para que notas.txt también se guarde en el stash, tendrías que usar git stash -u (o --include-untracked).