/

Cómo usar git stash: guía paso a paso

por Team Ninja
How to Use Git Stash blog banner
How to Use Git Stash blog banner

Prueba nuestro software de gestión de endpoints n.º 1 en G2

Sin necesidad de tarjeta de crédito, acceso completo a todas las funciones.

Webinar

Actualizaciones de NinjaOne 12.0: todo lo que necesitas saber

Automatiza las aspectos más complejos de la TI

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

  1. Haz cambios en tu directorio de trabajo.
  2. Ejecuta git stash para guardarlos.
  3. 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ónGit StashGit CommitGit ResetGit Stage
FinalidadGuarda temporalmente los cambios sin confirmarGuarda los cambios de forma permanente en el historial del proyectoRestablece el HEAD actual a un estado concretoPrepara los cambios para el commit
ReversibilidadSe puede aplicar o eliminar más adelanteRequiere git revert o git reset para deshacerseSe puede deshacer con git reflog, pero puede ser destructivoÁrea de preparación
Pérdida de datosPermite cambiar de rama sin hacer commitNo afecta a las ramasPuede perder cambios sin confirmar (según las opciones)Requiere git commit para confirmar
RamasSe pueden crear varios stashesLos commits son linealesPuede cambiar de rama o crear una nuevaLos 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.

FAQs

No del todo. Git no ofrece una forma directa de recuperar un stash eliminado, porque los stashes son locales y nunca se confirman. Si lo has borrado hace poco, puedes usar git reflog para localizar el hash del commit y volver a aplicarlo con git stash apply seguido de ese hash.

Un stash puede durar indefinidamente, ya que Git nunca los elimina por su cuenta. Permanecerá en tu repositorio local durante meses o incluso años, siempre que no lo borres de forma explícita.

Sí, en el sentido de que git stash funciona conceptualmente como una pila LIFO (último en entrar, primero en salir). La diferencia es que ofrece una flexibilidad adicional que las estructuras de datos de tipo pila tradicionales no tienen.

Sí, puedes usar git stash pop en una rama distinta, porque git stash es una pila global de tu repositorio. No está vinculado a la rama concreta en la que lo creaste.

Quizá también te interese...

¿Listo para simplificar los aspectos más complejos de las TI?