Uso de git stash para guardar trabajo temporal
Aprende a utilizar el comando git stash para guardar temporalmente cambios en tu área de trabajo, permitiéndote cambiar de contexto rápidamente sin necesidad de hacer commit.
Cristian Escalante
Última actualización: 29 de abril de 2025
Uso de git stash para guardar trabajo temporal
Durante el desarrollo de software, es común encontrarse en situaciones donde necesitas interrumpir tu trabajo actual para atender otra tarea más urgente. Quizás estás en medio de una característica cuando surge un bug crítico que requiere atención inmediata, o tal vez necesitas cambiar rápidamente a otra rama para revisar el código de un compañero. En estos casos, git stash
se convierte en una herramienta invaluable.
¿Qué es git stash?
git stash
es un comando que guarda temporalmente los cambios que has realizado en tu directorio de trabajo para que puedas trabajar en otra cosa y luego volver a aplicar esos cambios más tarde. Es como tener un "cajón" donde puedes guardar tu trabajo en progreso sin necesidad de hacer un commit.
Los cambios guardados con stash incluyen:
- Archivos modificados y rastreados
- Archivos en el área de preparación (staging)
- Por defecto, no incluye archivos no rastreados (untracked)
Comandos básicos de git stash
Guardar cambios en el stash
# Guardar todos los cambios rastreados
git stash
# O con un mensaje descriptivo (recomendado)
git stash save "Implementación parcial del login"
# Incluir también archivos no rastreados
git stash -u
# o
git stash --include-untracked
# Incluir todos los archivos (incluso los ignorados)
git stash -a
# o
git stash --all
Ver la lista de stashes
git stash list
Ejemplo de salida:
stash@{0}: WIP on feature/login: abc1234 Añade formulario de login
stash@{1}: On main: Correcciones de estilo en la página principal
Aplicar cambios guardados
# Aplicar el stash más reciente y mantenerlo en la lista
git stash apply
# Aplicar un stash específico
git stash apply stash@{2}
# Aplicar el stash más reciente y eliminarlo de la lista
git stash pop
# Aplicar un stash específico y eliminarlo
git stash pop stash@{2}
Eliminar stashes
# Eliminar el stash más reciente
git stash drop
# Eliminar un stash específico
git stash drop stash@{2}
# Eliminar todos los stashes
git stash clear
Inspeccionar el contenido de un stash
# Ver un resumen de los cambios en el stash más reciente
git stash show
# Ver un diff detallado del stash más reciente
git stash show -p
# Ver un diff detallado de un stash específico
git stash show -p stash@{1}
Casos de uso comunes
1. Cambiar rápidamente de contexto
Escenario: Estás trabajando en una nueva característica cuando surge un bug crítico en producción.
# Guardar tu trabajo actual
git stash save "Trabajo en progreso: nueva característica"
# Cambiar a la rama principal
git checkout main
# Crear una rama para la corrección
git checkout -b hotfix/bug-crítico
# Resolver el bug, hacer commit y merge
# Volver a tu rama original
git checkout feature/nueva-característica
# Recuperar tu trabajo
git stash pop
2. Limpiar el directorio de trabajo para actualizar
Escenario: Tienes cambios locales y necesitas actualizar tu rama con los últimos cambios del repositorio remoto.
# Guardar cambios locales
git stash
# Actualizar tu rama
git pull origin main
# Recuperar tus cambios
git stash pop
3. Experimentar con una idea sin hacer commit
Escenario: Quieres probar una solución alternativa sin comprometerte a ella.
# Implementar la idea experimental
# ...
# Guardarla para referencia futura
git stash save "Enfoque alternativo para optimización"
# Continuar con la implementación principal
4. Transferir cambios entre ramas
Escenario: Realizaste cambios en la rama equivocada y necesitas moverlos.
# Guardar los cambios
git stash
# Cambiar a la rama correcta
git checkout rama-correcta
# Aplicar los cambios
git stash pop
Características avanzadas
Crear una rama desde un stash
Si decides que los cambios en un stash merecen su propia rama:
git stash branch nueva-rama stash@{1}
Este comando crea una nueva rama basada en el commit donde se creó el stash, aplica los cambios y elimina el stash si la operación tiene éxito.
Stash parcial
Si solo quieres guardar algunos cambios específicos:
git stash -p
# o
git stash --patch
Git te mostrará cada fragmento modificado y te preguntará si deseas incluirlo en el stash.
Recuperar archivos específicos de un stash
git checkout stash@{0} -- ruta/al/archivo
Crear un stash sin el área de staging
Si quieres guardar solo los cambios que no están en el área de staging:
git stash --keep-index
Buenas prácticas
1. Usa mensajes descriptivos
Siempre incluye un mensaje claro cuando crees un stash:
git stash save "Implementación parcial de autenticación con Google"
Esto te ayudará a identificar rápidamente el contenido del stash más tarde.
2. No uses stash para almacenamiento a largo plazo
El stash está diseñado para cambios temporales. Para cambios que necesitas conservar por más tiempo:
- Crea una rama dedicada
- Haz commits regulares
- Usa notas de Git
3. Verifica el contenido antes de aplicar
Antes de aplicar un stash, especialmente si tienes varios:
git stash show -p stash@{1}
4. Resuelve conflictos cuidadosamente
Cuando aplicas un stash, pueden surgir conflictos si los archivos han cambiado desde que creaste el stash. Resuélvelos como harías con cualquier otro conflicto de merge.
5. Limpia stashes antiguos
Revisa periódicamente tu lista de stashes y elimina los que ya no necesites:
git stash list
git stash drop stash@{3}
6. Considera alternativas cuando sea apropiado
Para algunas situaciones, otras herramientas de Git pueden ser más adecuadas:
- Commits temporales (con
git commit --amend
ogit rebase -i
más tarde) - Ramas de corta duración
- Commits con WIP (Work In Progress)
Solución de problemas comunes
Conflictos al aplicar un stash
Si encuentras conflictos al aplicar un stash:
- Resuelve los conflictos manualmente
- Añade los archivos resueltos con
git add
- Finaliza con
git stash drop
si usastegit stash apply
Recuperar un stash eliminado accidentalmente
Si eliminaste un stash por error, a veces puedes recuperarlo usando git fsck
:
git fsck --no-reflog | grep commit | cut -d' ' -f3 | xargs git show
Busca en la salida el commit que parece contener tu trabajo perdido.
Stash no incluye archivos no rastreados
Recuerda que por defecto, git stash
solo guarda archivos modificados que ya están siendo rastreados. Usa -u
o --include-untracked
para incluir archivos nuevos.
Integraciones con herramientas
Editores y IDEs
Muchos editores y entornos de desarrollo integran la funcionalidad de stash en su interfaz gráfica:
- Visual Studio Code: A través de la extensión GitLens o el panel de Git integrado
- IntelliJ IDEA/WebStorm: Menú VCS > Git > Stash Changes
- Sublime Merge: Botón "Stash" en la interfaz
- GitKraken: Opción de stash en el panel derecho
Herramientas de línea de comandos
- Oh My Zsh: Proporciona alias útiles para comandos de stash
- Git Extras: Extiende la funcionalidad de stash
Comparación con otras técnicas
Técnica | Ventajas | Desventajas |
---|---|---|
git stash | Rápido, no afecta el historial | Fácil de olvidar, no para largo plazo |
Commit temporal | Documentado en el historial | Puede ensuciar el historial |
Rama temporal | Mejor organización, más flexible | Más pasos para configurar |
WIP commit | Simple, visible | Ensucia el historial, requiere rebase |
Conclusión
git stash
es una herramienta poderosa que te permite cambiar rápidamente de contexto sin perder tu trabajo en progreso. Es especialmente útil para interrupciones de corto plazo y para mantener un flujo de trabajo limpio.
Dominar el uso de stash te permitirá trabajar de manera más fluida y responder rápidamente a las necesidades cambiantes del desarrollo, sin comprometer la organización de tu repositorio o la calidad de tu historial de commits.
Recuerda que aunque stash es muy útil, no reemplaza las buenas prácticas de gestión de ramas y commits. Úsalo como una herramienta complementaria en tu flujo de trabajo de Git para maximizar tu productividad y mantener la flexibilidad en tu proceso de desarrollo.