Git
git stash

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

git stash push -m resultado 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.

git stash push nombrearchivo

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.

Resultado de la ejecución de git stash 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.

git stash show ejemplo finalizado

Ahora ejecuta el comando show.

git stash show resultado en ejecución

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

git stash apply 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

 git stash pop resultado de la ejecución

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.

Resultado de la ejecución de git stash drop

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í

git stash clear resultado de la ejecución

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í

 git stash branch execution result

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.

copyright for git stash

© 2023 All rights reserved.