git stash — Más que un guardado de emergencia (Stash parcial, Stashes nombrados y el resto)
Más allá de la salvación en caso de pánico: estashes nombrados, lista de estashes, mostrar -p, estash parcial con --patch, aplicar versus pop, y el problema de los archivos no rastreados que eventualmente enfrentarás.
Aprendiste git stash en pánico. Alguien te notificó en medio de una característica, necesitabas cambiar de rama inmediatamente, y el stash era la salida más rápida. Salvó el día.
Luego tenías tres stashes, olvidabas qué contenía, aplicabas el malo en la mala rama y decidías que el stash estaba roto. No está roto. Solo necesitas un par más de comandos.
Los archivos no rastreados te atraparon (lee esto primero)
git stash solo guarda rastreados archivos — archivos ya conocidos por git. Los nuevos archivos que no has estudiado son invisibles para él.
# You created a new file mid-feature
echo "temp work" > new-feature.js
git stash
# new-feature.js is still sitting there — stash ignored it entirely
Añadir -u para incluir archivos no rastreados:
git stash push -u
También hay -a (--all) que incluye archivos ignorados también. Eso casi nunca es lo que quieres — almacenará tus node_modules cambios y .env archivos y hará que la restauración sea un infierno.
Nombra tus stashes antes de arrepentirte
El mensaje predeterminado del stash es:
stash@{0}: WIP on main: a3f1c2d Update dependencies
Eso es inútil cuando tienes tres stashes de tres características incompletas diferentes. Usa git stash push -m para nombrarlos:
git stash push -u -m "wip: oauth token refresh flow"
git stash push -u -m "experiment: lazy load images on scroll"
git stash push -u -m "fix: header z-index issue"
Ahora git stash list es realmente legible:
stash@{0}: On main: fix: header z-index issue
stash@{1}: On feature/images: experiment: lazy load images on scroll
stash@{2}: On feature/auth: wip: oauth token refresh flow
Aplica uno específico por índice:
git stash apply stash@{2} # brings back the auth work
Revisa antes de aplicar: stash show -p
git stash show te da un resumen de los archivos modificados. Añade -p para el diferencial completo:
git stash show -p stash@{2}
Este es el comando que la mayoría de personas salta y luego se arrepienten. Sin él, estás restaurando cambios de forma ciega sobre una rama que pudo haber cambiado significativamente desde que lo guardaste. Un rápido show -p toma diez segundos y te dice exactamente qué estás a punto de aplicar.
Si quieres comparar el diferencial del stash con el estado actual de un archivo lado a lado, pega ambos en el Comparación de texto herramienta — más rápido que manipular git diff stash@{N}..HEAD -- path/to/file en tu mente.
Aplicar vs. pop: una diferencia que realmente importa
Ambos comandos restauran tu stash. Una diferencia crítica:
git stash pop= aplicar + eliminar la entrada del stashgit stash apply= aplicar, mantener la entrada del stash
Si pop y encuentras un conflicto de fusión, git elimina la entrada del stash antes de que resuelvas nada. Ahora tienes un árbol de trabajo en conflicto y ninguna referencia de stash para caer.
apply mantiene la entrada mientras resuelves el conflicto, luego limpias manualmente:
# Safer workflow when conflicts are possible
git stash apply stash@{0}
# resolve any conflicts
git stash drop stash@{0} # explicit cleanup once you're happy
La extra drop etapa vale la pena cuando el stash representa horas de trabajo.
Stash parcial con –patch
A veces solo quieres guardar parte de tus cambios. Tienes un parche de bug y la mitad de una nueva característica en el mismo archivo, y quieres commitear el parche mientras guardas el código de la característica.
git stash push --patch (o -p) abre una sesión interactiva hunk por hunk:
git stash push -p -m "wip: new feature half"
Para cada hunk, obtienes la misma y/n/s/q interfaz que git add -p. Escribe s para dividir un hunk en piezas más pequeñas si el auto-dividir de git no es suficientemente fino. Es más lento que un stash normal, pero es la forma más limpia de dividir un árbol de trabajo sucio sin crear una rama de descarte.
Una advertencia: --patch modo no incluye archivos no rastreados, por lo que no puedes combinarlo con -u. Si tienes nuevos archivos no rastreados que forman parte de la característica que estás guardando, necesitarás git add primero para que se conviertan en rastreados, luego ejecuta el stash parcial.
Casos de uso reales
Conmutación de contexto en medio de una característica. Un revisor deja retroalimentación urgente en otra PR mientras estás profundamente inmerso en código incompleto. Guarda con un nombre, cambia de rama, realiza la revisión, regresa y aplica. Sin commits en proceso, sin ejercicios de ramas.
git stash push -u -m "wip: refactor auth middleware"
git checkout fix/urgent-prod-bug
# ... review and fix ...
git checkout feature/auth-refactor
git stash pop
Verificación de una ejecución limpia de pruebas. Quieres confirmar que tus pruebas pasan en un árbol de trabajo limpio — no con tus cambios parciales accidentalmente filtrándose en el entorno de prueba:
git stash push -u
npm test # or pytest, cargo test, whatever
git stash pop
Esto detecta el caso en el que las pruebas pasan solo debido a modificaciones locales. Ocurre más frecuentemente de lo que crees en repositorios con fijos de pruebas compartidos.
Conmutación de ramas con un árbol de trabajo en conflicto. Git se niega a verificar una rama cuando tu árbol de trabajo tiene cambios que serían sobrescritos. Guarda primero, cambia de rama, deshaz. Más rápido que git commit --fixup solo para mover ramas.
hoja de referencia de git stash
| Comando | Qué hace |
|---|---|
git stash push | Guarda cambios rastreados (abreviatura: git stash) |
git stash push -u | Incluye archivos no rastreados |
git stash push -m "name" | Guarda con un nombre descriptivo |
git stash push -u -m "name" | No rastreados + nombrados (la combinación que usarás más) |
git stash push -p | Guarda parcialmente interactiva (por hunk) |
git stash list | Lista todos los stashes |
git stash show stash@{N} | Resumen de archivos modificados en un stash |
git stash show -p stash@{N} | Diferencial completo de un stash |
git stash apply stash@{N} | Aplica un stash, mantiene la entrada |
git stash pop | Aplica el último stash, elimina la entrada |
git stash drop stash@{N} | Elimina una entrada específica de stash |
git stash clear | Elimina todas las entradas de stash |
git stash branch <branchname> | Crea una nueva rama a partir de un stash y aplica |
La salida de escape de la rama de stash
Una más comando que vale la pena conocer: git stash branch <branchname>. Esto crea una nueva rama en el commit donde guardaste, aplica el stash y lo elimina si la aplicación es limpia. Es la opción correcta cuando tus cambios guardados han crecido lo suficiente como para merecer su propia rama — y evita completamente el problema de conflicto porque estás reejecutando el stash en el árbol exacto desde el que proviene.
La costumbre que soluciona el 90% de dolor de stash: nombra todo con -m, y usa apply en lugar de pop hasta que estés seguro de que los cambios se integraron correctamente. La extra drop etapa cuesta dos segundos. Perder un stash que necesitabas cuesta mucho más.
Instalar extensiones
Agregue herramientas IO a su navegador favorito para obtener acceso instantáneo y búsquedas más rápidas
恵 ¡El marcador ha llegado!
Marcador es una forma divertida de llevar un registro de tus juegos, todos los datos se almacenan en tu navegador. ¡Próximamente habrá más funciones!
Herramientas clave
Ver todo Los recién llegados
Ver todoActualizar: Nuestro última herramienta se agregó el 15 de junio de 2026
