Original article: How to Use the Git Stash Command

Digamos que estás trabajando en una característica importante de una rama en Git – como sería renovar la sección hero de tu página de marketing. Querrás comenzar a hacer experimentos en tu rama Revamp/Marketing-page-hero-section sin arruinar la rama master o main.

Después de repente te llama tu compañero de trabajo para arreglar algunos errores en la rama login-page. Es un problema serio. Así que, intentas cambiar a la rama login-page usando git switch login-page o git checkout login-page.

Si estás cambiando ramas con cambios "staged" y "unstaged", te podrías encontrar con cualquiera de los siguientes escenarios:

Primero, mientras cambias a la rama login-page, los cambios "staged" y "unstaged" de la rama Revamp/Marketing-page-hero-section vendrán contigo a la rama login-page.

La rama Revamp/Marketing-page-hero-section contiene algunos cambios "staged" y "unstaged" en el index.html.

stash-1

Si cambiamos a la rama login-page, los cambios "staged" y "unstaged" en la rama Revamp/Marketing-page-hero-section vienen al login-page también.

stash-1-1

Esto embarra a la rama login-page.

Luego, a veces Git no te permite cambiar ramas sin confirmar esos cambios. Esto es porque podrías perder los cambios que hiciste en tu rama actual o podrían entrar en conflicto con el destino (login-page). Cualquiera sea la razón, no podemos cambiar la rama sin confirmar o almacenar los cambios.

error

Al mismo tiempo, no puedes confirmar la rama feature medio hecho.

Para ello, puedes usar Git stashing. Stash significa almacenar (cambios) de manera segura en un lugar oculto (la pila stash).

Almacenar los cambios o archivos sin seguimiento del directorio de trabajo actual y almacenarlos en la pila de almacenamiento, revierte el directorio de trabajo actual a la última confirmación.

Esto es bueno saberlo, ¿no? Comencemos a trabajar con los comandos stash.

Tabla de contenidos

Cómo ocultar tus cambios 🤐

Puedes usar cualquiera de los comandos de abajo para ocultar cambios staged y unstaged en la pila de stash. Este anula las cosas al último commit y no elimina los cambios, los cuales están almacenados en la pila stash.

git stash

o

git stash save

Cómo ocultar archivos sin rastrear❗

¿Quieres ocultar tus archivos sin rastrear en la pila de stash? Solo usa la bandera --include-untracked al final del comando.

git stash --include-untracked

o usa -u al final del comando:

git stash -u

Cómo listar los stashes 📃

Usa el comando de abajo para listar todos los stashs almacenados en la pila de stash:

git stash list

Lista los stashs de esta forma,

list-1
  • Los últimos stashs (stash@{0}) estarán en la parte superior de la pila.
  • Los stashs anteriores (stash@{1}) estarán en la parte inferior de la pila.

Entendiendo el formato de stash

El comando stash lista los stashs en el siguiente formato:

stash-list
Un formato de stash

Si no te queda bien claro lo que está diciendo 😅, no hay problema. Exploremos algunos de los términos de la lista de stash:

  • Stash@{0} – esto es sólo una referencia de stash. Se refiere al stash particular. Por defecto, Stash@{0} siempre es el último stash.

Nota: stashs con números más elevados como stash@{3} son stashs más antiguos. Los últimos stashs siempre tienen el número más bajo.

  • WIP On fake fake es sólo un nombre de una rama como cualquier otra rama y WIP significa Work In Progress (Trabajo En Progreso). "WIP on fake" significa que stash@{0} fue creado en la rama "fake".
  • fc99b30 add head linefc99b30 es una hash de Commit y add head line es un mensaje de confirmación. Al tiempo de la creación del stash, fc99b30 add head line es la última confirmación.

Tal vez tengas múltiples stashs en tu pila de stash y no eres capaz de distinguir cuál referencia de stash sostiene tales cambios.

Así que, antes de que apliques stashs en la rama de trabajo actual, puedes confirmar y mostrar los cambios registrados en el stash con el comando de abajo:

git stash show

Por defecto, git stash show muestra los cambios registrados en el último stash (stash@{0}) en el formato --stat.

El formato --stat solamente muestra cuántas líneas has agregado y eliminado en cada uno de los archivos modificados.

readme.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Si quieres mostrar los cambios registrados en el último stash en el patch view, usa la bandera -p al final del comando, así:

git stash show -p

Si también quieres mostrar archivos sin rastrear, usa la bandera -u.

git stash show -u

o puedes usar la bandera --include-untracked así:

git stash show --include-untracked

Puedes mostrar archivos sin rastrear con el formato patch:

git stash show -p -u

Puedes también mostrar solamente archivos sin rastrear con el formato patch así:

git stash show -p --only-untracked

Vaya ya has aprendido más de 10 comandos de stash 🎉🎉

Miremos algunos más así puedes aprovechar lo máximo de stash.

Cómo mostrar un stash individual 📺

Puedes mostrar los cambios registrados de un stash individual usando referencia de stash.

git stash show stash@{1}

Para el formato patch, adivinaste bien 👏🏻👏🏻 – usa la bandera -p .

git stash show stash@{1} -p

¿Quieres mostrar un stash con archivos sin rastrear? Usa este comando:

git stash show stash@{1} -u

o este:

git stash show stash@{1} --include-untracked

Donde sea que puedas hacer esto para mostrar archivos sin rastrear solamente:

git stash show stash@{1} --only-untracked

Cómo aplicar el stash 🖊️

Para aplicar los cambios registrados de tu último stash en la rama de trabajo actual, así también como quitar ese stash de la pila de stash, ejecuta este comando:

git stash pop

Nota: Podemos aplicar stashs en cualquier rama. No es específico a la rama donde el stash fue creado.

También puedes aplicar el último stash sin quitar el stash de la pila de stash así:

git stash apply

Puedes aplicar un stash anterior usando la referencia de stash:

git stash apply stash@{3}

Cómo eliminar un stash ☠️

¿Quieres limpiar todos los stashs de la pila de stash? Usa este comando:

git stash clear

¿Quieres eliminar un stash en particular? ¡Sí! Estás en lo cierto – usa la referencia de stash:

git stash drop stash@{2}

Cómo crear una rama de stash

branch-stash

Sí, puedes crear una nueva rama de tu último stash. Sólo usa este comando:

git stash branch <branch_name>

Por ejemplo,

git stash branch demo

Si quieres crear una rama de un stash anterior, también es posible usando la referencia de stash:

git stash branch <branch_name> stash@{revision}

Por ejemplo,

git stash branch purple stash@{3}

Concluyendo

¡Qué largo viaje! – hubo un montón por cubrir. Si no puedes recordar cada comando, está bien. Cuanto más uses estos comandos, más fácilmente los recordarás. Te puedes referir a mi hoja de trucos de comandos de stash de git para una referencia rápida.

Espero que hoy hayas captado nuevas cosas sobre el stash de git. Es tiempo de relajarse y tomar un café o un té 🍵. ¡Hazme saber si tienes preguntas!