HDP115

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.

CE

Cristian Escalante

Última actualización: 29 de abril de 2025

git
control de versiones
desarrollo
productividad

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 o git 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:

  1. Resuelve los conflictos manualmente
  2. Añade los archivos resueltos con git add
  3. Finaliza con git stash drop si usaste git 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écnicaVentajasDesventajas
git stashRápido, no afecta el historialFácil de olvidar, no para largo plazo
Commit temporalDocumentado en el historialPuede ensuciar el historial
Rama temporalMejor organización, más flexibleMás pasos para configurar
WIP commitSimple, visibleEnsucia 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.

Uso de .gitignore efectivo
Aprende a configurar y utilizar el archivo .gitignore de man...
Cómo deshacer cambios en Git
Aprende las diferentes formas de deshacer cambios en Git, de...
Referencias
Git. Git - git-stash Documentation. https://git-scm.com/docs/git-stash
Scott Chacon and Ben Straub. Pro Git Book - Stashing and Cleaning. https://git-scm.com/book/en/v2/Git-Tools-Stashing-and-Cleaning
Atlassian. Atlassian Git Tutorial - Git Stash. https://www.atlassian.com/git/tutorials/saving-changes/git-stash

Conceptos Básicos de HTML

Aprende los conceptos básicos de HTML

Conceptos Básicos de CSS

Aprende los conceptos básicos de CSS

Conceptos Básicos de JavaScript

Aprende los conceptos básicos de JavaScript

Conceptos Básicos SQL

Aprende los conceptos básicos de SQL

Conceptos Básicos de Python

Aprende los conceptos básicos de Python

Conceptos Básicos de UML

Aprende los conceptos básicos de UML

Refuerzo Academico de Herramientas de Productividad 2025