¿Qué es Git Stash y Cómo Guardar Cambios Temporales?
Aprende a usar la pila de Git Stash: guardar borradores con mensajes personalizados, listar entradas acumuladas, restaurar cambios con `stash pop` o `stash apply` y desechar cambios obsoletos.
Git Stash es un comando utilitario que almacena temporalmente en un cajón oculto (pila o stack) las modificaciones no confirmadas de tu directorio de trabajo y área de preparación, devolviendo el proyecto a un estado limpio sin necesidad de crear un commit artificial a medio terminar.
Es la solución perfecta ante interrupciones imprevistas: cuando estás en medio de una tarea experimental compleja y te piden cambiar de rama urgentemente para corregir un bug de producción, `git stash` guarda tu borrador en segundos y te permite moverte libremente.
Imagina que estás armando un rompecabezas de 2,000 piezas en la mesa del comedor y de repente llega tu familia para cenar: en lugar de desarmar las piezas o pegarlas con pegamento a la fuerza antes de tiempo, tomas una bandeja especial, colocas todas las piezas armadas encima y guardas la bandeja en el armario. La mesa queda limpia para cenar y más tarde sacas la bandeja para continuar exactamente donde ibas.
Explicación Paso a Paso del Tema
Guardar cambios en el cajón temporal
Limpia tu espacio de trabajo de forma instantánea sin comprometer tu código.
Si intentas cambiar de rama con `git switch main` teniendo cambios sin confirmar que chocan con la rama destino, Git bloqueará la operación. Ejecuta `git stash push -m "tu descripción"`. Tus archivos volverán al estado del último commit y tus modificaciones quedarán a salvo en la memoria interna de Git.
git stash push -u -m "borrador de animaciones"
| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| push | Operación de pila | Coloca una nueva entrada en la cima de la pila de stash |
| -u (o --include-untracked) | Bandera de inclusión | Incluye también archivos nuevos que aún no han sido rastreados con git add |
| -m "descripción" | Etiqueta | Asigna un nombre recordatorio al borrador para no confundirlo en la lista |
Usa siempre la bandera `-u` si durante tu sesión de trabajo creaste archivos o imágenes nuevas que quieras resguardar en el stash.
Hacer `git stash` simple y olvidar que no incluye archivos nuevos sin rastrear (untracked); esos archivos quedarán flotando sueltos en el directorio.
Restaurar los cambios guardados (Pop vs Apply)
Recupera tu borrador una vez que hayas terminado la tarea urgente.
Al regresar a tu rama de trabajo original: usa `git stash pop` si deseas recuperar los cambios y borrarlos del cajón al mismo tiempo (el comportamiento más habitual). Usa `git stash apply` si deseas aplicar los cambios pero mantener una copia del borrador en el stash por seguridad.
git stash pop
| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| pop | Extracción destructiva | Aplica los cambios del stash más reciente (stash@{0}) y lo elimina de la pila si no hay conflictos |
| apply | Extracción no destructiva | Aplica los cambios pero conserva la entrada en la lista por si deseas reutilizarla en otra rama |
Si tienes varios borradores guardados, puedes restaurar uno específico indicando su índice: `git stash pop stash@{2}`.
Hacer `git stash pop` estando ubicado en una rama equivocada, aplicando tus cambios sobre código que no tiene relación.
Limpiar entradas antiguas del stash
Elimina borradores viejos que ya no necesites para no saturar la lista.
Si acumulaste borradores viejos que ya no sirven: usa `git stash drop stash@{0}` para eliminar una entrada específica sin aplicarla. Si deseas vaciar la pila entera de un solo golpe, utiliza `git stash clear`.
git stash drop stash@{0} && git stash list| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| drop | Eliminación puntual | Borra la entrada especificada de la pila de stash |
| clear | Vaciado total | Destruye todas las entradas de stash acumuladas en el repositorio |
No uses el stash como almacenamiento permanente a largo plazo; es exclusivamente una herramienta de transición para tareas cortas de horas o días.
Ejecutar `git stash clear` pensando que deshace cambios; borra definitivamente todos los borradores almacenados en el stash.
Casos Prácticos Reales en Producción
Situaciones de ingeniería reales sin mención de presupuestos ficticios.
1Caso de Producción: Atención de Emergencia sin Commits Basura en el Historial
Un ingeniero estaba rediseñando un formulario complejo con 12 archivos a medio modificar cuando saltó una alerta crítica: un botón en la pasarela de pagos estaba roto en producción.
En lugar de hacer un commit desordenado con mensaje 'WIP no funciona' en su rama, ejecutó `git stash push -u -m "refactor-formulario"`, cambió a la rama de hotfix, reparó el botón, desplegó la solución a producción, regresó a su rama y recuperó su trabajo intacto con `git stash pop`.
Fichas Nemotécnicas de Conceptos Clave
Glosario rápido para recordar los términos fundamentales de la lección.
Toma todos los cambios modificados y rastreados, los guarda en una pila interna y limpia el directorio de trabajo.
Restaura los cambios guardados en la parte superior de la pila y los elimina inmediatamente del cajón de stash.
Muestra todas las instantáneas temporales archivadas en la pila con sus índices identificadores (`stash@{0}`, `stash@{1}`).
¿Qué es Git Stash y Cómo Guardar Cambios Temporales?
Selecciona una opción para autoevaluarte al instante. La respuesta se califica de inmediato.
¿Cuál es la principal ventaja de 'git stash' ante una urgencia mientras programas?
¿Qué bandera debe añadirse a 'git stash' para incluir también archivos nuevos que aún no han sido rastreados?
¿Qué diferencia existe entre 'git stash pop' y 'git stash apply'?
Preguntas Frecuentes (FAQ)
¿Puede ocurrir un conflicto al hacer 'git stash pop'?
Sí. Si la rama en la que estás aplicando el stash sufrió cambios en las mismas líneas mientras el borrador estuvo guardado, Git te avisará de un conflicto de merge habitual para que lo resuelvas a mano.
¿Se pierden los stashes si apago la computadora?
No. Los stashes quedan persistidos dentro de la base de datos local en la carpeta `.git` hasta que decidas borrarlos explícitamente con pop, drop o clear.
¿Puedo crear una rama nueva directamente a partir de un stash?
Sí, ejecutando `git stash branch nombre-de-la-rama stash@{0}`. Git creará la rama, se posicionará en ella, aplicará el stash y lo eliminará de la pila automáticamente.