Puntos clave
- Para guardar los cambios actuales, ejecuta git stash. Este comando guarda el trabajo sin confirmar y devuelve tu directorio de trabajo al último commit.
- Para etiquetar un stash o añadirle una nota, usa git stash push -m «mensaje».
- Para ver todo lo que has guardado, ejecuta git stash list. Verás el identificador y el mensaje de cada stash.
- Para recuperar los cambios guardados, usa git stash apply si quieres conservar el stash como respaldo, o git stash pop para eliminarlo al volver a aplicarlo.
- Para borrar los stashes que ya no necesitas, usa git stash drop para uno concreto o git stash clear para eliminarlos todos.
- Para incluir archivos nuevos sin seguimiento en un stash, añade la opción –include-untracked o su forma abreviada, -u.
Git stash es un comando de Git que guarda temporalmente los cambios sin confirmar de tu directorio de trabajo, de modo que puedes cambiar de rama o de tarea sin tener que hacer un commit del trabajo a medias.
En esta guía analizaremos git stash a fondo: empezaremos por el concepto, su utilidad y sus casos de uso. Después veremos lo básico, como recuperar y gestionar los stashes, y pasaremos a técnicas avanzadas. Cerraremos con las mejores prácticas y su importancia en el desarrollo de software, para que acabes con una visión completa de git stash.
Git y la importancia de git stash
Antes de entrar en los detalles de git stash, conviene entender qué es Git. En pocas palabras, Git es un sistema de control de versiones distribuido muy utilizado en el desarrollo de software para hacer seguimiento de los cambios en el código fuente. Al ser distribuido, varios desarrolladores pueden trabajar a la vez sobre el mismo código sin interferir en el trabajo de los demás.
Estas son las funciones que hacen de Git una herramienta imprescindible para cualquier desarrollador:
- Ramas y fusiones: el modelo de ramas de Git permite trabajar en entornos aislados llamados «ramas» y fusionar después esos cambios en el código fuente sin complicaciones.
- Velocidad y eficiencia: Git está diseñado para el rendimiento. Sus operaciones son rápidas, así que sirve para proyectos de cualquier tamaño.
- Integridad de los datos: Git protege la integridad del código fuente manteniendo un historial completo y un seguimiento total de versiones.
Con estos aspectos de Git claros, ya puedes profundizar en el comando git stash, una herramienta que, aunque se comenta menos que otras como git commit o git merge, puede ser una pieza valiosísima en el arsenal de cualquier desarrollador.
¿Qué es git stash?
El comando git stash es una función muy potente de Git. En esencia, es un mecanismo para guardar el estado actual de tu directorio de trabajo y del índice sin hacer un commit. Funciona como un portapapeles para los cambios sin confirmar: crea una instantánea que puedes volver a aplicar más adelante. Es una pieza fundamental del control de versiones, porque ayuda a gestionar los cambios de código con más flexibilidad y eficiencia. Aparta temporalmente, o «guarda en el stash», los cambios que has hecho en el directorio de trabajo, para que puedas dedicarte a otra cosa y recuperarlos después.
Git stash resulta especialmente útil en estas situaciones:
1. Guardar trabajo en curso
Situación: un desarrollador necesita cambiar a otra rama para atender un problema crítico, pero está a mitad de implementar la corrección de un error.
Caso de uso: git stash guarda los cambios actuales sin confirmarlos, de modo que el desarrollador puede cambiar de rama o hacer otras modificaciones y volver luego a la rama original para recuperar los cambios guardados.
2. Limpiar el directorio de trabajo
Situación: un desarrollador tiene cambios sin confirmar en su directorio de trabajo que no puede perder, pero quiere empezar a trabajar en una función nueva desde cero.
Caso de uso: git stash retira temporalmente los cambios sin confirmar. Así deja limpio el directorio de trabajo, el desarrollador crea la nueva función desde cero y después vuelve a aplicar los cambios anteriores.
3. Probar distintos enfoques
Situación: un desarrollador está trabajando en una solución y quiere probar otro enfoque sin perder lo que ya tiene hecho.
Caso de uso: git stash permite guardar los cambios actuales para probar enfoques distintos. Le da un punto de partida limpio para experimentar y, si el nuevo enfoque no funciona, puede volver a los cambios guardados.
4. Resolver conflictos de fusión
Situación: un desarrollador quiere guardar temporalmente algunos cambios para atender otros asuntos urgentes mientras busca la forma de resolver un conflicto de fusión complejo.
Caso de uso: git stash guarda los cambios de forma temporal, así el desarrollador puede centrarse en otros problemas y volver después a resolver el conflicto de fusión.
5. Guardar solo una parte de los cambios
Situación: un desarrollador quiere elegir solo algunos de los múltiples cambios que tiene en su directorio de trabajo para guardarlos en el stash.
Caso de uso: git stash permite guardar archivos concretos o partes de ellos, lo que da más control sobre qué se guarda.
6. Trabajar con varias funciones a la vez
Situación: un desarrollador necesita alternar entre varias funciones en las que está trabajando al mismo tiempo.
Caso de uso: git stash permite guardar el progreso de la función en la que se está trabajando para pasar a otra sin perder los cambios hechos. El desarrollador puede guardar su trabajo en una rama de función, cambiar a otra rama y volver a aplicar los cambios guardados cuando regrese a la función original.
7. Revisiones de código
Situación: un desarrollador necesita dejar cambios sin confirmar en su directorio de trabajo para revisar el código de un compañero.
Caso de uso: git stash permite guardar los cambios, revisar el código del compañero y volver a aplicar los cambios guardados al regresar al directorio de trabajo.
8. Hacer una copia de seguridad del trabajo sin confirmar
Situación: un desarrollador quiere copiar sus cambios sin confirmar a otra rama o a un repositorio remoto.
Caso de uso: git stash permite guardar los cambios, crear una rama nueva a partir del stash, subir esa rama a un repositorio remoto y así conservar una copia de seguridad del trabajo sin confirmar.
9. Trabajo colaborativo
Situación: un desarrollador necesita traer la última versión del repositorio sin perder sus cambios locales, pero trabaja en un repositorio compartido.
Caso de uso: git stash permite guardar los cambios y después hacer un pull de los últimos cambios o actualizaciones del repositorio remoto. Luego se vuelven a aplicar los cambios guardados.
10. Automatizar el flujo de trabajo
Situación: un desarrollador usa scripts o hooks que requieren un directorio de trabajo limpio.
Caso de uso: git stash permite guardar los cambios antes de ejecutar scripts o hooks y volver a aplicarlos después, garantizando así un directorio de trabajo limpio para los procesos de automatización.
Estos son solo los casos de uso más habituales de git stash, y demuestran su flexibilidad a la hora de resolver problemas y agilizar los flujos de trabajo de desarrollo.
Limitaciones habituales de git stash
Como la mayoría de los comandos de Git, git stash tiene sus limitaciones:
- No sustituye a los commits.
- Los stashes son locales, no se comparten entre repositorios.
- Los archivos sin seguimiento e ignorados no se guardan de forma predeterminada.
Cómo usar git stash
Guardar cambios en Git es sencillo. Basta con ejecutar git stash en tu directorio de trabajo. El comando guarda todos los cambios modificados y preparados, y te deja un directorio de trabajo limpio.
Guarda tus cambios
- Haz cambios en tu directorio de trabajo.
- Ejecuta git stash para guardarlos.
- El directorio de trabajo vuelve al estado del commit más reciente.
Guarda cambios con un mensaje
Para acompañar tus stashes con un mensaje, usa git stash push -m «mensaje». Así resulta más fácil organizarlos e identificarlos, sobre todo cuando manejas varios.
Consulta tus stashes
Usa git stash list. Este comando muestra la lista de todos los stashes, cada uno con su identificador y su mensaje (si lo has añadido).
Incluye archivos sin seguimiento
De forma predeterminada, git stash solo guarda los archivos con seguimiento o los que se han añadido al índice. Puedes usar git stash –include-untracked o git stash -u para guardar también los archivos sin seguimiento.
Guarda archivos concretos
Si solo quieres guardar archivos o directorios concretos, usa git stash push -m «mensaje» –path/to/file1 path/to/file2. Este comando resulta muy práctico cuando quieres hacer cambios por separado en distintos archivos o directorios y gestionarlos de forma independiente.
Guarda cambios seleccionados
git stash -p te permite elegir qué cambios concretos guardar, con lo que tienes más control sobre el contenido del stash.
Cómo aplicar los stashes de Git
Aplicar el último stash
git stash apply vuelve a aplicar el stash más reciente y lo mantiene guardado en tu lista.
Aplicar y eliminar el último stash
git stash pop restaura los cambios guardados y los borra definitivamente de tu lista.
Aplicar un stash concreto
Si quieres aplicar un stash determinado de entre varios almacenados, enuméralos con git stash list y aplica el que quieras usando su identificador: git stash apply stash@{n}.
Cómo solucionar los problemas más habituales de git stash
Resolver conflictos al aplicar un stash
- Problema: aparecen conflictos al aplicar un stash porque los cambios se solapan.
- Solución: resuelve los conflictos manualmente en los archivos afectados y después ejecuta git add y haz el commit.
Gestionar stashes en estado HEAD desacoplado
- Problema: aplicar stashes después de trabajar en estado HEAD desacoplado.
- Solución: haz checkout a la rama que quieras y aplica el stash con git stash apply o git stash pop.
Evitar stashes duplicados
- Problema: stashes duplicados al aplicarlos sin eliminarlos.
- Solución: después de aplicar un stash, usa git stash drop para borrarlo si ya no lo necesitas.
Cómo gestionar y eliminar stashes de Git
Eliminar un stash concreto
git stash drop stash@{n} te permite borrar stashes concretos.
Eliminar todos los stashes
git stash clear elimina todos los stashes que has creado.
Recuperar un stash eliminado
Si has borrado un stash por error, usa git reflog para encontrar su hash de commit y vuelve a aplicarlo con git stash apply <commit-hash>.
Las mejores estrategias para gestionar los stashes
- Usa mensajes descriptivos: añade una nota clara a cada stash que crees para identificar rápidamente su contenido al revisar la lista.
- Guarda los cambios antes de cambiar de rama: para mantener limpio el directorio de trabajo, guarda primero tus cambios antes de pasar a otra rama.
- Revisa y limpia con regularidad los stashes innecesarios: aplica o elimina los stashes cuando ya no los necesites, así tu lista se mantiene limpia y ordenada.
- Usa commits para los cambios a largo plazo: usar los stashes como almacenamiento permanente dificulta el seguimiento y la gestión de los cambios con el tiempo. Haz commits para conservar el trabajo importante y poder revisar o restaurar los cambios más fácilmente.
Comandos avanzados de git stash
Estos son algunos comandos avanzados de git stash que cubren tanto casos habituales como situaciones más específicas:
Conservar los cambios preparados
Normalmente, al aplicar un stash, los cambios que estaban preparados cuando lo creaste dejan de estarlo. Con git stash apply –index se vuelve a aplicar el stash y además se preparan de nuevo los cambios que estaban en el área de preparación en ese momento.
Crear una rama a partir de un stash
Si tienes un stash que debería estar en una rama aparte, el comando git stash branch new_branch_name stash@{n} crea una rama nueva desde el commit en el que se creó el stash, le aplica los cambios recientes y después elimina el stash.
Es una forma excelente de gestionar cambios guardados que han acabado convirtiéndose en una función o una corrección de errores de mayor envergadura.
Limitaciones habituales de git stash
- No sustituye a los commits.
- Los stashes son locales, no se comparten entre repositorios.
- Los archivos sin seguimiento e ignorados no se guardan de forma predeterminada.
Técnicas avanzadas con git stash
Guardar archivos o cambios concretos
Para guardar archivos concretos, usa git stash push [file1] [file2]. Solo afecta a los archivos o cambios indicados, lo que te da un control más detallado sobre el contenido del stash.
Gestionar conflictos al aplicar los cambios guardados
Al aplicar un stash pueden surgir conflictos. Trátalos igual que un conflicto de fusión: edita los archivos para resolverlos y después añádelos y haz el commit.
Git stash facilita el cambio de rama
- Guardar los cambios en la rama actual.
- Cambiar a la rama de destino.
- Aplicar el stash en la nueva rama.
Mejores prácticas con git stash
Como en tantos otros procesos de desarrollo, git stash también tiene estrategias que ayudan a aprovechar al máximo sus funciones. Estas son algunas de las mejores prácticas:
Usa el stash con moderación: en otras palabras, no abuses de git stash. En lugar de guardar cambios, usa ramas dedicadas para el trabajo en curso de larga duración. Recuerda usar el comando con moderación, sobre todo cuando solo lo necesitas para atender otra tarea, porque afectará a los cambios que debas hacer al confirmar.
Usa mensajes de stash claros y descriptivos: puedes añadir un mensaje que describa los cambios que estás guardando. Conviene ser siempre claro con esos mensajes y evitar los innecesarios. Un mensaje significativo e informativo te ayuda a recordar qué hay exactamente en el stash cuando vuelvas a él más adelante. Además, los mensajes claros facilitan identificar y aplicar el stash correcto después, lo que agiliza la recuperación.
Aprovecha las ramas: asegúrate siempre de crear una rama nueva antes de guardar cambios. Así puedes pasar a otras tareas o ramas sin que tus cambios actuales se vean afectados. Después solo tienes que volver a la rama y aplicar el stash cuando decidas retomar esas modificaciones.
Guarda los archivos sin seguimiento: una de las prácticas que siempre deberías seguir es usar comandos que guarden también los archivos sin seguimiento. Así reduces el riesgo de perder datos o cambios importantes.
Gestiona varios stashes: hay comandos que te permiten gestionar varios stashes con eficacia. Entre ellos están git stash list para ver todos los stashes existentes, git stash apply stash@{<n>} (donde <n> es el índice del stash) para aplicar uno concreto y git stash drop stash@{<n>} (donde <n> es el índice del stash) para eliminar un stash que ya no necesitas.
Piénsalo antes de usar stash pop: igual que en la primera práctica, el comando stash pop (git stash pop) debe usarse con criterio. Aunque es una forma rápida de aplicar y eliminar un stash a la vez, la operación puede generar conflictos de fusión si los cambios guardados chocan con el árbol de trabajo actual. Como alternativa, puedes usar git stash apply para aplicar el stash sin borrarlo. Así resuelves los conflictos manualmente antes de eliminarlo con git stash drop.
Aplica los cambios cuanto antes: guardar cambios debe ser solo una solución temporal. Cuando termines un conjunto de cambios, haz un commit al repositorio para dejar constancia de ellos.
Otras estrategias útiles con git stash
Cómo mantener limpio el historial de Git
- Haz commits para lo permanente: para los cambios definitivos, mejor commits que stashes.
- git commit -m «Mensaje del commit»
- Mantenimiento de los stashes: límpialos con regularidad.
- git stash list y después git stash drop stash@{n}
- Refugio temporal: usa los stashes para cambios temporales, no de larga duración.
Errores habituales con git stash que debes evitar
- No abuses del stash: depender de él para cambios importantes.
- Acuérdate de recuperarlos: olvidarte de aplicar o eliminar los stashes.
- git stash apply o git stash pop
- Ten presente qué has guardado: perder la pista de lo que contiene cada stash.
- git stash list para revisarlos
- Aclara con comentarios: stashes confusos por comentarios insuficientes.
- git stash save «Mensaje descriptivo»
Cuando uses git stash en proyectos de equipo
- Comunica tus stashes: avisa de cualquier cambio guardado que pueda afectar
- Mejora del flujo de trabajo: usa los stashes para optimizar tu flujo de trabajo personal.
- Mantén los stashes en local: evita subirlos a repositorios compartidos, salvo que haya que crear una rama nueva a partir de un stash para confirmar los cambios locales en el repositorio de la forma más limpia posible.
Git stash, git commit, git reset y git stage: ¿en qué se diferencian?
Ya hemos hablado de git stash, así que veamos en qué se diferencia de otros comandos de Git como commit, reset y stage.
Git commit
Git commit es el comando que permite guardar los cambios del código fuente y almacenarlos en el repositorio local. Se usa para conservar una instantánea del proyecto en un momento concreto, de modo que quede una referencia del estado del proyecto en ese punto, incluidos los cambios preparados. Para verlo en contexto, aquí tienes una tabla con sus diferencias:
Git reset
Git reset es un comando que complementa a git stash y te permite gestionar los cambios de un repositorio de Git. Combinando ambos, puedes recuperar archivos de los que tenías copia o que habías eliminado y devolverlos al repositorio. Pero git stash y git commit también tienen diferencias, que puedes ver en la tabla siguiente:
Git stage
Git stage se usa para preparar los cambios antes del commit. El proceso consiste en añadirlos al área de preparación o «índice», lo que permite revisarlos antes de confirmarlos.
La tabla siguiente muestra las principales diferencias entre git stash, git commit, git reset y git stage:
| Función | Git Stash | Git Commit | Git Reset | Git Stage |
| Finalidad | Guarda temporalmente los cambios sin confirmar | Guarda los cambios de forma permanente en el historial del proyecto | Restablece el HEAD actual a un estado concreto | Prepara los cambios para el commit |
| Reversibilidad | Se puede aplicar o eliminar más adelante | Requiere git revert o git reset para deshacerse | Se puede deshacer con git reflog, pero puede ser destructivo | Área de preparación |
| Pérdida de datos | Permite cambiar de rama sin hacer commit | No afecta a las ramas | Puede perder cambios sin confirmar (según las opciones) | Requiere git commit para confirmar |
| Ramas | Se pueden crear varios stashes | Los commits son lineales | Puede cambiar de rama o crear una nueva | Los cambios se pueden sacar del área de preparación con git reset HEAD <file> |
¿Quieres cambiar de rama sin perder lo avanzado? Mira cómo usar git stash.
Guardar cambios en el stash fomenta buenos hábitos de desarrollo
Guardar con regularidad los cambios sin confirmar anima a mantener un código limpio y ordenado, lo que a su vez reduce la probabilidad de conflictos y errores. Es una práctica que, usada con criterio, mejora notablemente la eficiencia y la eficacia de la gestión del control de versiones.
Esta función no es un comando más dentro del enorme abanico de posibilidades de Git: es una herramienta clave para lograr flujos de trabajo de programación eficientes y flexibles. Al poder apartar temporalmente el trabajo en curso, puedes mantener un directorio de trabajo limpio, algo imprescindible en entornos de desarrollo de software complejos, donde la concentración y la organización son fundamentales.
La versatilidad de git stash está en su sencillez y en la cantidad de situaciones que cubre: desde cambios rápidos de contexto hasta experimentar con funciones nuevas sin alterar el código principal. Resulta especialmente útil en entornos colaborativos donde varios desarrolladores contribuyen al mismo proyecto.
Los stashes ayudan a que el trabajo de cada desarrollador se mantenga intacto y no se vea afectado por los cambios de los demás, lo que favorece una colaboración más fluida y productiva.
Tanto si acabas de empezar a programar con Git como si ya tienes años de experiencia, saber manejar git stash con soltura es una habilidad valiosísima para tu caja de herramientas de desarrollo de software. Ofrece una forma estratégica de gestionar los cambios de código, encaja bien con las buenas prácticas de desarrollo y, en definitiva, contribuye a una gestión de proyectos ágil y más eficiente.

