Introducción a Git

Teoría: Stash

Imagina que estás trabajando en una funcionalidad importante, pero de repente surge una tarea urgente. No puedes hacer un commit porque los cambios no están listos, ¿cómo pausas tu trabajo sin perderlo? 😱

En esta lección, aprenderemos a guardar temporalmente los cambios con git stash y a restaurarlos cuando sea necesario. ¡Perfecto para situaciones imprevistas! ⏸️🔄


¿Qué es git stash y para qué sirve?

Git nos permite almacenar temporalmente cambios en los archivos sin agregarlos al repositorio. Esto es útil cuando necesitamos cambiar de contexto sin hacer un commit.

Supongamos que estás desarrollando una nueva funcionalidad en un archivo y de repente debes corregir un error en un área del código no relacionada con tu trabajo actual. No puedes hacer commit de tus cambios porque aún no están completos, pero no quieres perderlos. Aquí es donde git stash te permite:

  1. Guardar tus cambios actuales en un área temporal.
  2. Volver a un estado limpio del repositorio.
  3. Hacer los cambios urgentes.
  4. Restaurar los cambios guardados y retomar tu trabajo.

Guardar cambios con git stash

Para simular este proceso, hagamos lo siguiente:

  1. Creamos y agregamos un archivo al índice.
  2. Guardamos los cambios en el stash.
# Creamos un archivo y lo agregamos al índice
touch FILE.md
git add FILE.md

# Verificamos el estado del repositorio
git status

Salida esperada:

On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   FILE.md

Ahora guardemos estos cambios con git stash:

git stash

Salida esperada:

Saved working directory and index state WIP on main: e7bb5e5 update README.md

git status

Verificamos nuevamente el estado con git status y notamos que el área de trabajo está limpia:

On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

¿Qué sucedió?
El comando git stash no elimina los archivos; solo los almacena temporalmente en una sección dentro de .git, permitiéndonos retomar el trabajo más tarde.

💡 git stash no guarda archivos nuevos que no han sido añadidos con git add.

Restaurar cambios con git stash pop

Una vez que hemos realizado la tarea urgente y queremos recuperar nuestros cambios guardados, usamos:

git stash pop

Salida esperada:

On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   FILE.md

Dropped refs/stash@{0} (b896d4a0126ef4409ede63857e5d996953fe75c5)

Ahora nuestros cambios han sido restaurados y podemos continuar trabajando.

Diferencia entre git stash apply y git stash pop:

  • git stash apply restaura los cambios pero mantiene< la copia en el stash.
  • git stash pop restaura los cambios y los elimina del stash.

Uso avanzado: Varios git stash

El stash funciona como una pila (estructura donde el último en entrar es el primero en salir). Podemos almacenar múltiples cambios y recuperarlos en orden inverso.

git stash   # Guardar cambios 1
# Modificar archivos
git stash   # Guardar cambios 2

git stash pop  # Recuperar cambios 2
git stash pop  # Recuperar cambios 1

También podemos ver la lista de elementos guardados con:

git stash list

Resultado:

stash@{0}: WIP on main: 123abc Cambios recientes
stash@{1}: WIP on main: 456def Otra modificación

Para restaurar un stash específico, usamos:

git stash apply stash@{1}

Para eliminar un stash que ya no necesitamos:

git stash drop stash@{1}

Resumen

  • git stash guarda cambios sin hacer commit, permitiéndote cambiar de contexto sin perder tu trabajo.
  • git stash pop restaura y elimina el último estado guardado en el
  • git stash apply restaura los cambios pero mantiene la copia en el stash.
  • Podemos ver los cambios guardados usando git stash list.
  • git stash funciona como una pila, permitiendo almacenar múltiples cambios y recuperarlos en orden inverso.

Con git stash, podemos trabajar de manera más eficiente sin preocuparnos por perder cambios no listos para el commit. ¡Pruébalo en tu propio flujo de trabajo!

Completado

0 / 15