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
.
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.
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.
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 🤐
- Cómo ocultar archivos sin rastrear❗
- Cómo listar los stashs 📃
- Entendiendo el formato de stash
- Cómo mostrar el último stash 📺
- Cómo mostrar un stash individual 📺
- Cómo aplicar el stash 🖊️
- Cómo eliminar un stash ☠️
- Cómo crear una rama de un stash
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,
- 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:
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 questash@{0}
fue creado en la rama "fake".fc99b30 add head line
– fc99b30 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
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!