Comandos de Git

git stash

git stash: guarda temporalmente los cambios de tu directorio de trabajo para usarlos más tarde, mientras devuelve el directorio de trabajo a un estado limpio (el estado del último commit).

Cuando ejecutas git stash, Git toma las ediciones que has hecho en archivos con seguimiento (y cualquier cambio que hayas preparado) y las guarda en un almacenamiento temporal llamado stash. Después, tus archivos de trabajo se restauran a como estaban en el último commit.

Esto resulta útil cuando necesitas pausar lo que estás haciendo, quizá para cambiar de rama, traer actualizaciones nuevas o probar algo con riesgo, sin perder tu progreso. Por defecto, Git deja tranquilos los archivos sin seguimiento, pero puedes elegir incluirlos.

El stash funciona como una pila de cartas. Puedes poner cambios nuevos encima de la pila y sacarlos cuando los vuelvas a necesitar. En la mayoría de los casos usarás git stash (que es lo mismo que git stash push) para crear un stash nuevo, y más tarde usarás git stash pop para volver a aplicarlo; eso también lo elimina de la lista de stashes.

Cada stash recibe un identificador como stash@{0}, donde 0 es la entrada más reciente. Puedes listar, aplicar, inspeccionar, eliminar o borrar todos los stashes en cualquier momento.

Ejemplos

Guardar temporalmente tus cambios actuales y limpiar el directorio de trabajo:

git stash

Equivale a:

git stash push

Aplicar el stash más reciente y eliminarlo de la lista de stashes:

git stash pop

Añadir un mensaje descriptivo a tu stash para identificarlo más fácilmente después:

git stash push -m "WIP: responsive header"

Incluir archivos sin seguimiento en el stash:

git stash push -u

Revisar qué tienes guardado en stash e inspeccionar el diff de una entrada concreta:

git stash list
git stash show -p stash@{0}

Volver a aplicar un stash sin eliminarlo, restaurando tanto el directorio de trabajo como los cambios preparados:

git stash apply --index stash@{1}

Esto puede ser útil si quieres aplicar el stash en varias ramas o conservarlo para usarlo más adelante.

Eliminar una entrada concreta del stash:

git stash drop stash@{0}

Borrar todos los stashes cuando ya no hacen falta:

git stash clear