Course contentsShow
← Git & GitHub
Lesson 94 of 965. Advanced Productivity and WorkflowFree lesson

Managing Context Switching with Git Stash

Safely pause your current task to address urgent bugs or code reviews by temporarily shelving uncommitted changes without disrupting your workflow.

In this lesson, you will learn how to use git stash to preserve your work-in-progress state, allowing you to pivot instantly to urgent tasks without committing unfinished code.

The Problem: Interrupted Momentum

As an advanced developer, you know the frustration of being mid-feature when an urgent bug report or a time-sensitive code review request arrives. You cannot commit your current changes because they are "dirty"—inconsistent, broken, or logically incomplete—but you need a clean working directory to switch branches and address the interruption.

The Solution: Shelving with Stash

git stash acts as a temporary "clipboard" for your local repository. It takes your modified tracked files and staged changes, saves them into a hidden stack, and reverts your working directory to match the HEAD commit. This clears the stage, letting you check out a new branch to work on that critical hotfix without polluting your commit history with incomplete work.

Consider this workflow:

# 1. Save your current progress
git stash

# 2. Your directory is now clean; handle the urgent task
git checkout -b hotfix-urgent-bug
# ... perform fixes, commit, and push ...

# 3. Return to your original branch and restore your progress
git checkout feature-branch
git stash pop

Pro-Tips for Advanced Context Switching

  • Label your stashes: Use git stash save "WIP: integrating API v2" to give your stash a descriptive name. This prevents you from losing track of what is inside your hidden stack.
  • Stash Untracked Files: By default, git stash ignores new files that haven't been staged yet. If you have created new files you want to preserve, use git stash -u (or --include-untracked).
  • View your stack: If you forget what you have saved, use git stash list to see a summary of all shelved states.

By mastering git stash, you ensure your commit history remains clean and atomic, even when your workday is fragmented by competing priorities.

Key Takeaway: git stash allows you to safely set aside uncommitted work, providing a clean slate for urgent interventions without the need for premature or "junk" commits.