📦 Key Takeaways: Git stash temporarily saves uncommitted changes. Perfect for switching branches or context switching.
You have uncommitted changes and need to switch branches. Git stash saves the day.
🚀 Basic Stash Operations
# ✅ Stash uncommitted changes
git stash
# Output:
# Saved working directory and index state WIP on main: abc1234 Commit message
# ✅ Stash with message
git stash push -m "WIP: Feature in progress"
# ✅ View stash list
git stash list
# stash@{0}: On main: WIP: Feature in progress
# stash@{1}: On main: WIP: Bug fix
# ✅ Apply latest stash (keep it)
git stash apply
# ✅ Apply and remove latest stash
git stash pop
# ✅ Apply specific stash
git stash apply stash@{1}
# ✅ Drop specific stash
git stash drop stash@{1}
# ✅ Clear all stashes
git stash clear
💡 Advanced Stash Operations
# ✅ Stash untracked files
git stash -u # Include untracked files
git stash -a # Include all files
# ✅ Stash specific files
git stash push -m "Stash specific file" -- src/Program.cs
# ✅ Stash with keep index
git stash --keep-index # Stash changes, keep staged
# ✅ Create branch from stash
git stash branch new-feature stash@{0}
# ✅ View stash diff
git stash show
git stash show -p stash@{0} # Full diff
# ✅ Apply stash with conflict resolution
git stash apply --index # Restore staged changes
💡 Pro Tip: Stash Workflow
# ✅ Effective stash workflow
# 1. Save current work before switching
git stash push -m "WIP: Feature X"
# 2. Switch branch
git checkout hotfix
# 3. Fix issue
git add .
git commit -m "Hotfix: Critical bug fixed"
# 4. Switch back
git checkout feature-branch
# 5. Restore work
git stash pop
# ✅ Stash with integration
git stash push -m "WIP: Work in progress"
git pull --rebase origin main # Or git rebase main
git stash pop
# ✅ Stash multiple changes
git stash push -m "UI changes"
git stash push -m "Backend changes"
git stash apply stash@{1} # Backend changes
git stash apply stash@{0} # UI changes
