git stash comando: save, drop, pop, cancel, list, apply
El tema de este artículo es el comando git stash
. Es un comando muy útil que usarás más de lo que crees, incluso más que git add y git commit, así que apréndelo para aumentar tu productividad en el desarrollo.
1. ¿Qué es git stash?
El comando git stash
almacena temporalmente los cambios en los que estás trabajando.
Esto es útil porque hay algunos comandos que sólo pueden ejecutarse cuando el árbol de trabajo se limpia al confirmar el cambio actual, como un cambio de rama.
En estos casos, git stash
se puede utilizar para guardar temporalmente el estado de tu trabajo, y luego puedes procesar una serie de comandos y volver para seguir trabajando.
Cuando ejecutamos el comando git stash
, Git recopila todos los cambios (índice) en curso y sin procesar, y los almacena en un nuevo objeto stash.
Luego los almacena temporalmente en una ubicación separada llamada stash
.
Cuando se ejecuta stash, la rama actual está en el último estado confirmado. En este estado eres libre de usar casi cualquier comando Git.
Echemos un vistazo a las diferentes formas de usar el comando git stash
con algunos ejemplos del mundo real.
2. Creando un nuevo stash usando el comando push
El comando push
es el comienzo del git stash
: guarda los cambios actuales, y si quieres, también puedes introducir un mensaje separado para distinguir este stash.
Solíamos usar el comando git stash save
, pero hay un nuevo comando git stash push
que añade mucha funcionalidad.
Así que ahora usaremos el comando push
.
La principal característica añadida por push
es la capacidad de ejecutar stash en archivos sin seguimiento, en todos los archivos, y en un archivo o directorio específico.
Úsalo así
$ git stash push -m [message]
Veamos los resultados de la ejecución
Empecemos por arriba. El comando git switch
fue abortado porque añadimos un nuevo cambio al archivo 1.md
.
Git nos aconseja hacer commit o stash si queremos cambiar.
Yo hago stash con el comando git stash
, que limpia el árbol de trabajo y me permite hacer el comando git switch
.
El comando push
puede usarse para almacenar cualquier archivo, incluyendo archivos sin seguimiento con la opción -u
y archivos ignorados con la opción -a
.
También puedes especificar un nombre concreto de archivo o directorio para empujar, como se muestra a continuación.
A diferencia del ejemplo anterior, nosotros no especificamos un mensaje con la opción -m
, así que puedes ver que Git nos ha generado un mensaje con un ID de confirmación.
3. Obteniendo la lista de stash usando el comando list
Como vimos brevemente en el ejemplo anterior, el comando list
te mostrará una lista de tus stashes guardados.
Listará todos los stashes creados en todas las ramas, con los más recientes numerados más cercanos a 0
.
El comando puede usarse así
$ git stash list
Creemos dos stashes más, uno en la rama main
y otro en la rama develop
, y ejecutemos el comando list
.
El comando git stash list
muestra un total de tres listas de stash.
Como hemos guardado 2 stashes de la rama develop
sin ningún mensaje, es imposible saber cuáles han sido los cambios mirando la lista.
No olvides la opción -m
del comando push
para casos como este.
4. Viendo el contenido del stash con el comando show -p
Si sólo ves una lista de stash, como en el ejemplo que acabamos de ver, puede que no sepas qué cambios están almacenados en cada stash.
Aquí es donde el comando show -p
es útil.
El comando show
simplemente le indica los nombres de archivo de los cambios almacenados en el stash y el número de líneas modificadas.
Con la opción -p
, puedes ejecutar el comando git diff
para obtener una vista más detallada de los cambios dentro de los archivos.
Si no introduces [stash-number]
, se ejecutará automáticamente contra el stash más reciente, el número 0
.
$ git stash show -p [stash-number]
Para ver los resultados de la ejecución, añade nuevo contenido al archivo 2.md
y ejecuta el comando push
.
Ahora ejecuta el comando show
.
Como se muestra arriba, la salida será diferente dependiendo de si tienes la opción -p
o no.
5. Restaurando tu stash con el comando apply
Una vez que has guardado tu stash con el comando push
y has terminado, necesitas hacer algo para deshacer tus cambios.
Para ello puedes utilizar los comandos apply
y pop
.
De estos, el comando apply
asegura que el stash guardado no se borre después de restaurar el stash.
El comando tiene el siguiente aspecto Si no especifica [stash-number]
, se ejecutará automáticamente contra el stash más reciente, el número 0.
$ git stash apply [stash-number]
Mostramos el resultado de la ejecución
Después de guardar el stash con el mensaje for stash
, lo importamos con el comando apply
. El comando apply
ejecuta el comando git status
, que muestra el estado actual de la copia de trabajo.
para mostrar el estado actual del árbol de trabajo.
Si compruebas la lista de stash después de apply
, puedes ver que el stash restaurado sigue ahí.
6. Borrar el stash después de la recuperación con el comando pop
.
Al igual que el comando apply
, el comando pop
también se utiliza para deshacer cambios en la caché, y borra el stash existente después de la recuperación.
El comando es el siguiente, y de nuevo, si no especificas [stash-number]
, se ejecutará automáticamente contra el stash más reciente, el número 0
.
$ git stash drop [stash-number]
Cuando se ejecuta, tiene el siguiente aspecto
Una vez más empujamos un stash con el mensaje para stash. Luego usamos el comando pop
para revertir los cambios y obtuvimos la misma salida que cuando usamos el comando apply
.
La única diferencia es que el stash ha sido borrado y ya no aparece en la lista de stash.
7. Borrar un stash sin aplicarlo con el comando drop
o clear
El comando drop
borra los cambios en un stash específico sin aplicarlos al árbol de trabajo.
Se utiliza con el siguiente comando, que automáticamente se dirige al stash más reciente, el número 0
, a menos que se especifique [stash-number]
.
$ git stash drop [stash-number]
Veamos el resultado del comando pop
.
Puedes ver que el stash en el mensaje for stash
, que era el número 0, ha sido eliminado.
Si ya no necesitas todos los stashes de la lista de stashes y quieres borrarlos, puedes hacerlo con el comando clear
.
El comando tiene el siguiente aspecto
$ git stash clear
Puedes ejecutarlo así
Después de ejecutar el comando clear
, todos los listados del stash han sido eliminados.
8. Cómo mover los cambios actuales a una nueva rama usando el comando stash branch
A veces necesita mover todos los cambios en los que ha estado trabajando en la rama actual a una nueva rama y trabajar en ellos allí.
Esto puede hacerse con una combinación del comando git add y el comando git checkout/git switch.
Sin embargo, el comando git stash branch
hace posible esta tarea con un solo comando.
Usa el comando de abajo, y si no especificas [stash-number]
se ejecutará automáticamente contra el stash más reciente, el número 0
.
$ git stash branch [new-branch-name] [stash-number]
Y puedes ejecutarlo así
9. Reflexiones finales
Dado que muchos comandos de Git se ejecutan en un estado comprometido, el comando git stash
es uno de los comandos a los que recurro cada día.
Espero que este post te ayude a mejorar tu productividad diaria en el desarrollo.
