← Git

Reto de código

Reto 005 - Recuperar cambios con stash

Escenario

Estás a mitad de una feature, con cambios sin terminar en tu working directory, cuando te avisan de un bug urgente en producción que hay que arreglar en main de inmediato. No quieres commitear código incompleto. Tu objetivo es guardar temporalmente tu trabajo, cambiar de rama, arreglar el bug y volver a recuperar tu trabajo justo donde lo dejaste.

Cómo resolverlo

# Estas en feature con cambios a medias (sin commitear)
git status
# Changes not staged for commit: archivo.js (a medias)

# 1. Guardar los cambios temporalmente y limpiar el working directory
git stash push -m "feature a medias"
# El working directory queda limpio, como en el ultimo commit

# 2. Cambiar a main para atender el bug urgente
git switch main
echo "fix aplicado" > hotfix.txt
git add hotfix.txt
git commit -m "fix: corrige bug critico en produccion"
git push

# 3. Volver a la rama de feature
git switch feature

# 4. Recuperar los cambios guardados
git stash pop
# Vuelven tus cambios a medias y el stash se elimina de la pila

Por qué funciona

git stash toma tus cambios sin commitear y los guarda en una pila aparte, dejando el working directory limpio para poder cambiar de rama sin conflictos. Después de resolver lo urgente, git stash pop reaplica esos cambios sobre tu rama y borra el stash de la pila. Así cambias de contexto sin commitear código incompleto ni perder trabajo.

Solución completa

Ver solución comentada
# Guardar (con mensaje para identificarlo). Usa -u si tienes archivos nuevos.
git stash push -m "feature a medias"
# Si tuvieras archivos untracked: git stash push -u -m "feature a medias"

# Ver la pila de stashes
git stash list
# stash@{0}: On feature: feature a medias

# Atender el bug en main
git switch main
# ...arreglo, commit, push...

# Volver y recuperar
git switch feature
git stash pop
# Recupera y borra el stash. Si quisieras conservarlo: git stash apply

# Verificar que tus cambios volvieron
git status
# Changes not staged for commit: archivo.js (tu trabajo esta de vuelta)

Clave: pop recupera y borra el stash; apply recupera pero lo conserva en la pila. Y recuerda que git stash no incluye archivos untracked salvo que uses -u.