() translation by (you can also view the original English article)
Imagina que estás trabajando en una función de un proyecto de software controlado por Git. Estás a punto de hacer algunos cambios cuando recibes una solicitud para corregir un error crítico. Para comenzar a resolver el problema, necesitas una nueva rama y un directorio de trabajo limpio. Cuando se trata de comandos básicos de Git, tienes dos opciones:
- Ejecutar
git reset --hard
para eliminar los cambios no confirmados. - Registrar tu trabajo incompleto como una nueva confirmación.
La primera opción pierde todo tu trabajo, mientras que la segunda da como resultado una confirmación parcial que no es significativa. Ninguna de estas opciones es tan conveniente.
Aquí es donde entra en juego el comando git stash
. Al igual que git reset --hard
, te da un directorio de trabajo limpio, pero también registra tus cambios incompletos internamente. Después de corregir el error crítico, puedes volver a aplicar estos cambios y continuar donde lo dejaste. Puedes pensar en git stash
como un "botón de pausa" para tu trabajo en curso.



Requisitos previos
En este tutorial se supone que instalaste Git y que estás familiarizado con su flujo de trabajo básico. Deberías sentirte cómodo organizando cambios, creando confirmaciones y trabajando con ramas. También necesitarás un repositorio de Git para experimentar.
1. Almacenamiento de cambios
Antes de que puedas ejecutar git stash
, debes tener algunos cambios no confirmados en tu repositorio de Git. Por ejemplo, si editaste un archivo llamado foo.py
, tu salida git status
se vería así:
1 |
On branch master |
2 |
Changes not staged for commit:
|
3 |
(use "git add <file>..." to update what will be committed) |
4 |
(use "git checkout -- <file>..." to discard changes in working directory) |
5 |
|
6 |
modified: foo.py |
Para guardar estos cambios, simplemente ejecuta git stash
sin ningún argumento.
1 |
git stash |
Esto tomará tus cambios almacenados y no almacenados, los registrará internamente y luego borrará el directorio de trabajo. Esto te da la oportunidad de cambiar a una nueva rama y desarrollar otras funciones sin preocuparte de que tu confirmación parcial desordene algo.
2. Reaplicación de cambios guardados
Cuando estés listo para volver a tu trabajo incompleto, ejecuta el siguiente comando para volver a aplicar los cambios guardados:
1 |
git stash pop |
El conjunto de cambios guardados más recientemente volverá a aparecer en tu directorio de trabajo y podrás continuar exactamente donde lo dejaste. Eso es todo al respecto.
3. Resolución de conflictos
Al igual que el comando git merge
, git stash pop
puede generar conflictos si las mismas secciones del código fuente cambiaron desde que ejecutaste git stash
. Cuando esto suceda, verás el siguiente mensaje después de ejecutar git stash pop
:
1 |
Auto-merging foo.py |
2 |
CONFLICT (content): Merge conflict in foo.py |
También encontrarás el archivo afectado enumerado en la sección Unmerged paths
en la salida de git status
, así como las líneas afectadas en el archivo fuente.
1 |
<<<<<<< Updated upstream |
2 |
print("Recently committed changes"); |
3 |
=======
|
4 |
print("Incomplete work"); |
5 |
>>>>>>> Stashed changes |
Deberás resolver manualmente el conflicto en el archivo de origen, pero por lo general no querrás confirmarlo inmediatamente como lo harías después de un conflicto git merge
. La mayoría de las veces, continuarás trabajando en tu función inacabada hasta que hayas preparado una confirmación significativa. Luego, simplemente puedes agregarlo al índice y confirmarlo como de costumbre. En otras palabras, puedes tratar los conflictos de git stash pop
como cualquier otro cambio no confirmado.
4. La pila de almacenamiento
Para la mayoría de los escenarios, los comandos anteriores son todo lo que necesitas cuando se trata de un "botón de pausa". Sin embargo, comprender cómo se representan los cambios guardados abre nuevas posibilidades a un uso más avanzado.
Hasta ahora, sólo hemos estado hablando de guardar un solo conjunto de cambios. Sin embargo, cada vez que ejecutas git stash
, los cambios no confirmados se almacenan en una pila. Esto significa que puedes guardar varios conjuntos de cambios al mismo tiempo.



Esto es útil en las primeras etapas de desarrollo cuando no estás seguro de qué dirección quieres tomar. En lugar de perder tus cambios con git reset --hard
, puedes mantener tus instantáneas de trabajo en curso en la pila de almacenamiento en caso de que quieras volver a aplicar una de ellas más adelante.
Puedes inspeccionar la pila de almacenamiento con el parámetro list
.
1 |
git stash list |
Si anteriormente ejecutaste git stash
tres veces, esto generaría algo así:
1 |
stash@{0}: WIP on new-feature: 5cedccc Try something crazy |
2 |
stash@{1}: WIP on new-feature: 9f44b34 Take a different direction |
3 |
stash@{2}: WIP on new-feature: 5acd291 Begin new feature |
El comando git stash pop
siempre vuelve a aplicar la instantánea más reciente, la que está en la parte superior de la pila de almacenamiento. Pero también es posible elegir qué instantánea oculta quieres volver a aplicar con el comando apply
. Por ejemplo, si quisieras volver a aplicar el segundo conjunto de cambios, usarías el siguiente comando:
1 |
git stash apply stash@{1} |
Al igual que git stash pop
, los cambios volverán a aparecer en tu directorio de trabajo y puedes seguir trabajando en la función incompleta. Ten en cuenta que esto no eliminará automáticamente la instantánea de la pila de almacenamiento. En su lugar, deberás eliminarlo manualmente con el comando drop
.
1 |
git stash drop stash@{1} |
Una vez más, trabajar con la pila de almacenamiento es más un caso extremo para la mayoría de los usuarios de Git. Los comandos git stash
y git stash pop
deberían ser suficientes para la mayoría de tus necesidades, aunque git stash list
también puede ser útil si olvidaste dónde tuvo lugar tu última operación de almacenamiento.
Conclusión
La confirmación de instantáneas significativas es el núcleo de cualquier flujo de trabajo de Git. Las confirmaciones encapsuladas y con propósito hacen que sea mucho más fácil navegar por el historial de tu proyecto, averiguar dónde se introdujeron los errores y revertir los cambios.
Si bien no es exactamente un comando cotidiano, git stash
puede ser una herramienta muy conveniente para crear confirmaciones significativas. Te permite almacenar el trabajo incompleto evitando la necesidad de confirmar instantáneas parciales al historial de tu proyecto permanente. Ten esto en cuenta la próxima vez que quieras poder hacer una pausa en lo que estabas trabajando y volver más tarde.