Ir al contenido principal
Git

Git stash explicado: guarda, restaura y gestiona cambios

Aprende a usar git stash para guardar, inspeccionar, restaurar y gestionar cambios. Entiende el guardado selectivo, cómo resolver conflictos y las mejores prácticas para flujos de trabajo limpios.
Allan Ouko's photo
Allan Ouko
Actualizado · 9 min leer

Explora con IA

ChatGPTClaudePerplexity

Crea tu cuenta gratuita

Practica y programa tu progreso.

Continuar Con Google
Al continuar, aceptas nuestros Términos de uso, nuestra Política de privacidad y que tus datos se almacenen en los EE. UU.

Estás a mitad de la implementación de una nueva funcionalidad en tu canalización de datos cuando llega un informe de un bug urgente. Tu directorio de trabajo está lleno de cambios a medias. Aún no quieres hacer commit, pero necesitas cambiar de rama ya.

En este tutorial, te enseño a usar todo el conjunto de comandos de git stash. Aprenderás a guardar, inspeccionar, restaurar, guardar de forma selectiva y limpiar stashes en Git. Para seguir aprendiendo, te recomiendo nuestro curso Introduction to GitHub Concepts para aprender más sobre control de versiones y trabajo con repositorios en GitHub.

Aprende hoy los fundamentos de Git

Para principiantes: Control de versiones maestro mediante Git.
Empieza a Aprender Gratis

¿Qué es Git stash?

git stash es un comando de Git que aparca temporalmente tus cambios no confirmados para que vuelvas a un directorio de trabajo limpio sin crear un commit de Git. Así te resulta fácil cambiar de rama o atender trabajo urgente sin perder avances.

Los stashes se guardan en una pila LIFO (último en entrar, primero en salir). El más reciente siempre es stash@{0}, seguido de stash@{1}, y así sucesivamente.

Por defecto, git stash guarda archivos rastreados modificados y cambios preparados (del índice). Sin embargo, no incluye archivos nuevos no rastreados ni ignorados como los de .gitignore.

Cómo guardar cambios con git stash

En esta sección, te explico tres maneras habituales de hacer stash. Usaremos un mismo escenario: estás trabajando en un proyecto de canalización de datos con los archivos data_pipeline.py, config.yaml y tests/test_pipeline.py.

Guardar cambios rastreados

Como git stash guarda cambios modificados o preparados, ejecuta git status para comprobar el estado de los archivos en tu directorio de trabajo. Tras ejecutar git stash, se guardan los cambios rastreados tanto preparados como sin preparar, dejándote un directorio de trabajo limpio.

Cómo usar git stash para guardar cambios rastreados.

Incluir cambios no rastreados y archivos nuevos

Por defecto, git stash ignora archivos que nunca se han añadido al repositorio. Si has creado un archivo de prueba nuevo, un stash estándar lo dejará en tu directorio, lo que puede dar problemas al cambiar de rama.

Cómo usar git status para comprobar el estado actual del directorio de trabajo.

Si ejecutas git stash, ese archivo seguirá ahí. Para incluirlo, usa el comando -u o --include-untracked:

git stash -u

Cómo incluir cambios no rastreados y archivos nuevos usando git stash.

Para incluir absolutamente todo, incluidos los archivos ignorados explícitamente en tu .gitignore, puedes usar git stash --all o -a. Eso sí, ten cuidado: puedes arrastrar sin querer archivos como logs o artefactos de build.

Pon nombre a tu stash

Cuando usas git stash, mensajes por defecto como WIP on main se vuelven confusos si tienes varios stashes. Para evitarlo, añade siempre un mensaje descriptivo cuando quieras push de los stashes.

git stash push -m "refactor pipeline config handling."

Puedes usar el comando git stash list para ver y comparar la lista de stashes. Fíjate en la diferencia entre el stash con nombre y los stashes por defecto.

Cómo poner nombre a un stash con mensajes descriptivos.

Usar mensajes claros facilita mucho identificar el stash correcto después, sobre todo cuando alternas varias tareas o colaboras en equipo.

Te recomiendo probar nuestros itinerarios de habilidades GitHub Foundations y Git Fundamentals para aprender control de versiones con Git desde lo básico hasta flujos avanzados: seguimiento de cambios, gestión de repos y colaboración eficiente.

Cómo ver e inspeccionar tus stashes

Antes de aplicar un stash a ciegas, conviene verificar qué contiene. Este paso suele saltarse, pero ayuda a evitar confusiones o sobrescrituras accidentales.

git stash list: listar todos los stashes

Usa el siguiente comando para ver tu pila de stashes:

git stash list

Cómo listar todos los stashes usando git stash list.

Ya sabes que los stashes siguen un orden LIFO (last-in, first-out). El más reciente es siempre stash@{0}, y cada nuevo stash empuja los anteriores hacia abajo en la pila.

git stash show: inspecciona un stash antes de aplicarlo

Para un resumen rápido de los cambios de un stash, puedes usar el comando show sobre un stash concreto. Por ejemplo, el siguiente comando muestra los cambios del último stash:

git stash show stash@{0}

Cómo inspeccionar un stash antes de aplicar cambios.

Para ver los cambios reales de código (el diff completo), usa el siguiente comando para mostrar todas las modificaciones línea a línea guardadas en ese stash.

git stash show -p stash@{0}

Cómo inspeccionar los cambios de código de un stash antes de aplicarlo.

Como buena práctica, inspecciona siempre un stash antes de aplicarlo, especialmente si tiene días o no recuerdas qué contiene.

Cómo restaurar cambios guardados

Una vez que has guardado tu trabajo con git stash, necesitarás recuperarlo. Hay dos métodos principales para restaurar stashes, incluido cómo apuntar a uno concreto por su índice.

git stash pop: aplica y elimina

Es la forma más común de restaurar un stash. Toma el de arriba (stash@{0}), aplica los cambios a tu rama actual y después elimina ese stash de la pila.

git stash pop

Cómo restaurar y eliminar un stash con git stash pop.

Tras ejecutar pop, se restauran tus cambios y el stash se borra. Úsalo cuando tengas claro que ya no necesitas ese estado guardado y quieras mantener tu lista de stashes ordenada.

Para profundizar en el comando pop, te recomiendo nuestro tutorial Git Stash Pop para aprender a guardar trabajo no confirmado al cambiar de rama en tu repo.

git stash apply: aplica y conserva

Si quieres restaurar cambios pero conservar el stash para reutilizarlo, usa el comando apply así:

git stash apply stash@{1}

Cómo restaurar un stash y conservarlo usando git stash apply.

Fíjate en que referenciar un stash por índice stash@{1} apunta a ese stash concreto para restaurar. Este método es útil cuando quieres aplicar los mismos cambios en varias ramas, como un ajuste de configuración que debe ir a main y staging.

Puedes usar git stash list para confirmar que el stash sigue ahí después de usar apply.

Cómo mostrar todos los stashes usando git stash list.

Cómo hacer stash de forma selectiva

En proyectos reales, los cambios suelen mezclarse. En esos casos, puede que quieras guardar solo una parte de tu trabajo y mantener el resto disponible. Git ofrece dos métodos para un control más fino.

git stash push -m: guarda archivos específicos

Si sabes exactamente qué archivos necesitas apartar, puedes guardar solo los seleccionados indicando sus rutas:

Por ejemplo, el siguiente comando guarda únicamente el archivo data_pipeline.py. Es útil cuando quieres pausar una función experimental mientras mantienes un arreglo de bug preparado y listo para hacer commit.

git stash push -m "stash experimental pipeline logic" data_pipeline.py

Para comprobar si el comando se ejecutó correctamente, usa git status para ver el antes y el después de tu repo.

Cómo guardar archivos específicos con Git.

git stash push -p -m: guarda fragmentos específicos de forma interactiva

A veces, el código "bueno" y el "WIP" están en el mismo archivo. En ese caso, usa la opción -p o --patch para activar una sesión interactiva. Te permitirá elegir fragmentos concretos (“hunks”) de cambios dentro de un archivo.

git stash push -p -m "Selective stash of pipeline logic"

Cómo guardar fragmentos específicos de forma interactiva.

Verás la salida "Stash this hunk" con estas opciones:

  • y: Sí, guardar este hunk

  • n: No, omitir este hunk

  • q: Salir; no guardar este hunk ni los restantes.

  • a: Todos; guardar este hunk y todos los siguientes del archivo.

  • d: Borrar; no guardar este hunk ni los siguientes del archivo.

  • ?: ayuda

Este flujo es muy parecido a git add -p. Es útil cuando los cambios dentro del mismo archivo no están relacionados y hay que gestionarlos por separado.

Cómo limpiar tu stash

Los stashes deben ser de corta duración. Si los acumulas, te costará más encontrar el adecuado después y aumenta el riesgo de conflictos cuando por fin los apliques.

git stash drop: elimina un stash concreto

Para quitar un solo stash, usa git stash drop con su índice. Por ejemplo, el siguiente comando elimina el cuarto stash de la lista.

git stash drop stash@{3}

Cómo eliminar un stash concreto usando su índice.

Como ves arriba, la lista de stashes se reduce y los restantes se reindexan tras el borrado.

git stash clear: borra todos los stashes

Para eliminar todos los stashes de una vez, usa:

git stash clear

Este comando no muestra salida si tiene éxito, y puedes verificarlo con git stash list.

Cómo borrar todos los stashes con git stash clear.

Te recomiendo extremar la precaución con git stash clear, ya que esta acción es permanente y no hay deshacer integrado. Ejecútalo solo cuando tengas claro que no necesitas ningún trabajo guardado.

git stash branch: convierte un stash en una rama

Si tu rama actual ha divergido mucho desde que creaste el stash, al aplicarlo pueden aparecer conflictos de fusión. En ese caso, puedes crear una rama nueva directamente desde el stash:

git stash branch pipeline-fix stash@{1}

Cómo convertir un stash en una rama con git stash branch.

Este comando hace lo siguiente:

  • Crea una rama nueva desde el commit original donde se hizo el stash
  • Aplica el stash
  • Lo elimina de la lista de stashes

Te recomiendo nuestro tutorial Git Branch para aprender más sobre la gestión de ramas y mejorar el desarrollo y la colaboración.

Otros comandos de Git stash que merece la pena conocer

Más allá de los flujos habituales, estos son algunos comandos avanzados de git stash que conviene tener en el radar:

  • git stash create: crea un objeto stash sin añadirlo a la lista de stashes

  • git stash store: guarda un stash creado con create

  • git stash export: exporta un stash a una referencia o lo imprime

  • git stash import: importa un stash desde un commit existente

Errores comunes y cómo solucionarlos

Aunque git stash es sencillo, hay algunos problemas típicos que pueden darte guerra. Aquí tienes varios errores que me he encontrado y cómo reconocerlos y resolverlos rápido.

No local changes to save

Es el "no error" más frecuente. Ocurre cuando ejecutas git stash en un directorio de trabajo limpio, donde no hay archivos rastreados modificados ni preparados.

Para solucionarlo, ejecuta git status, y si no aparece nada, no hay nada que guardar.

Cómo solucionar \

Conflicto al aplicar un stash

Los conflictos suceden cuando la rama en la que estás ha cambiado las mismas líneas de código que existen en tu stash. Por ejemplo, si ejecutas git stash pop en la nueva rama después de modificar el archivo, probablemente verás un mensaje de error:

Conflicto de fusión al aplicar un stash.

Después, puede que veas marcadores de conflicto dentro del archivo:

Marcadores de conflicto en archivo no rastreado.

Para resolverlo, puedes hacer cualquiera de lo siguiente:

  • Resolver los conflictos manualmente en el archivo
  • Preparar (stage) los archivos resueltos
git add data_pipeline.py
  • Eliminar el stash manualmente con git stash drop (si NO se elimina automáticamente al haber conflicto)

Si los conflictos son demasiado liosos, usa el siguiente comando para aplicar los cambios en una base limpia.

git stash branch recovery-branch stash@{0}

Guardaste archivos por error

A veces puedes ejecutar git stash sin revisar tu directorio de trabajo y darte cuenta después de que has ocultado un arreglo que sí querías commitear.

Para evitarlo, sé siempre explícito con los archivos a guardar. Por ejemplo, el siguiente comando guardará solo data_pipeline.py en lugar de todo el directorio de trabajo.

git stash push data_pipeline.py

También puedes usar git stash -p para ejecutar el modo interactivo (patch) y guardar selectivamente partes de cambios dentro de archivos, no archivos completos.

Como medida preventiva, comprueba siempre git status antes de hacer stash.

Conclusión

Como regla general, mantén los stashes de corta duración y usa siempre mensajes descriptivos. Si no vas a retomar el trabajo en el día, crear una rama WIP es una opción más segura: puedes hacer push al remoto y no se perderá.

Para reforzar tus habilidades con Git, te recomiendo nuestro curso Intermediate Git sobre colaboración en Git. También te recomiendo Advanced Git para aprender a trabajar con Git en proyectos grandes y manejar escenarios complejos de control de versiones y problemas en el desarrollo de canalizaciones de datos.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Creo artículos que simplifican la ciencia de los datos y la analítica, haciéndolos fáciles de entender y accesibles.

Preguntas frecuentes sobre Git stash

¿git stash guarda archivos no rastreados?

No. Por defecto, git stash solo guarda archivos rastreados. Para incluir archivos no rastreados, usa git stash -u.

¿git stash afecta a mi historial de commits?

No. Los stashes son independientes de tu historial de commits y no aparecen en los registros de tu rama.

¿Cuál es la diferencia entre git stash pop y git stash apply?

git stash pop aplica el stash y lo elimina, mientras que git stash apply lo aplica pero lo mantiene en la lista.

¿Por qué Git dice "No local changes to save"?

Ocurre cuando tu directorio de trabajo está limpio: no hay archivos rastreados modificados o preparados que guardar.

¿Qué causa conflictos al restaurar un stash?

Los conflictos surgen cuando se han modificado las mismas partes de los archivos tanto en tu rama actual como en los cambios guardados en el stash.

Temas
Git

Aprende Git con DataCamp

Curso

Git intermedio

2 h
44K
Descubre las ramas y los repositorios remotos para el control de versiones en proyectos colaborativos de software y datos utilizando Git.
Ver detallesEmpezar Curso

Programa

Fundamentos de Git

7 h
Aprende a controlar versiones con Git, desde lo más básico hasta los flujos de trabajo avanzados. Haz un seguimiento de los cambios, gestiona repositorios y colabora eficazmente.

Crea tu cuenta gratuita

Practica y programa tu progreso.

Continuar Con Google
Al continuar, aceptas nuestros Términos de uso, nuestra Política de privacidad y que tus datos se almacenen en los EE. UU.
Ver más
Relacionado

Tutorial

Tutorial de Git Revert y Git Reset para principiantes

Una guía tutorial para principiantes que muestra cómo utilizar los comandos Git Revert y Reset.
Zoumana Keita 's photo

Zoumana Keita

10 min

Tutorial

Git Prune: Qué es la poda Git y cómo usarla

La poda Git es un comando Git que elimina del repositorio los objetos que ya no son accesibles desde ninguna confirmación o rama, ayudando a liberar espacio en disco.

Tutorial

Git rename branch: Cómo cambiar el nombre de una rama local o remota

Aprende a renombrar ramas Git locales y remotas utilizando el terminal o la interfaz gráfica de usuario (GUI) de clientes populares como GitHub.

Tutorial

Tutorial de GitHub y Git para principiantes

Un tutorial para principiantes que muestra cómo funciona Git y por qué es clave en proyectos de ciencia de datos.
Abid Ali Awan's photo

Abid Ali Awan

9 min

Tutorial

Tutorial de GIT Push y Pull

Aprende a realizar solicitudes de Git PUSH y PULL con GitHub Desktop y la línea de comandos.

Olivia Smith

13 min

Tutorial

Git pull force: Cómo sobrescribir una rama local con una remota

Aprende por qué git pull --force no es la mejor forma de sobrescribir una rama local con la versión remota, y descubre el método adecuado utilizando git fetch y git reset.
Ver más