Skip to content

Git Stash y Cambios Temporales

Cuándo Usarlo

Interrumpe tu trabajo sin ensuciar commits. Guarda un snapshot ligero fuera del historial.

Comandos Básicos

bash
git stash push -m "wip: login form"
git stash list
git stash show -p stash@{0}
git stash apply stash@{0}
git stash drop stash@{0}
git stash pop

Con Paths Específicos

bash
git stash push -m "solo ui" src/components/

Incluyendo Untracked y Ignorados

bash
git stash push -u       # untracked
git stash push -a       # untracked + ignored

Guardar Solo Parte (Interactivo)

bash
git add -p
# Stage selectivo
git stash push --staged -m "parcial"

Aplicar sin Borrar

bash
git stash apply stash@{2}

Reintegrar con Pop

bash
git stash pop          # aplica y elimina el último

Si hay conflicto puedes resolver y continuar; el stash no se borra si falla.

Ver Diferencias

bash
git stash show --name-only stash@{1}
git stash show -p stash@{1}

Nombrado Significativo

Usa prefijo wip: + área:

wip: billing proration logic
wip: refactor http client

Recuperar un Stash Borrado (Si Referencia en Reflog)

bash
git fsck --no-reflogs --lost-found

O pista en git reflog si se aplicó recientemente.

Mantener Limpio

  • Elimina stashes antiguos semanalmente
  • No conviertas stashes en backlog oculto

Convertir en Rama

bash
git stash branch tmp-refactor stash@{0}

Útil si los cambios eran más grandes de lo pensado.

Casos de Uso Comunes

SituaciónAcción
Cambio urgente hotfixgit stash push → cambiar de rama
Rebase largogit stash push --keep-index
Experimentación arriesgadaStash incremental
Probar build limpiaStash + test

Flags Clave

FlagDescripción
-mMensaje
-uIncluye untracked
-aIncluye untracked + ignored
--stagedSolo index
--keep-indexNo guarda index

Anti-Patrones

AntipatrónRiesgo
Usar stash como storage largoOlvido / confusión
Stash sin mensajeDifícil de identificar
Pop sin revisarPérdida accidental

Alternativas

NecesidadMejor Opción
Guardar progreso compartibleCommit WIP en rama
Dividir cambiosCommits atómicos
Probar hipótesisRama throwaway

Resumen

git stash es buffer temporal, no historial paralelo. Úsalo para interrupciones controladas y vuelta rápida al foco.