
Mastering Git Stash: A Comprehensive Guide for Developers
Git is one of the most widely used version control systems today, and among its many commands, git stash is a powerful tool that can make your life as a developer a lot easier. But let’s be honest — it can be confusing at first. What is this “stash”,” where does it belong and why should you care?
In this guide, you’ll learn everything you need to know about using stash
effectively, from the basics to advanced scenarios. By the end of this post, you’ll be a stash pro and able to use this incredibly useful command to optimize your development process.
Table of Contents
What is Git Stash?
Why you need Git Stash
Basic use of Git Stash
- How to cache your changes
- Viewing your stash
- Committing stash changes
- Discarding a stash
Advanced Git stash commands
- Stashing specific files
- Creating a branch from a stash
- Stash Pop vs Stash Apply
- Keep or discard changes after stashing
Common Git Stash use cases
- Interruptions during coding
- Switching between branches
- Cleaning up uncommitted changes
Best practices for using Git Stash
- Naming the stashes
- Managing multiple stashes
- Knowing when not to use Stash
Git Stash alternatives and complementary tools
Conclusion
What is Git Stash?
Let’s start with the basics: the Git Stash is a kind of temporary storage area in Git where you can keep unconfirmed changes without losing them. You might be working on a feature, but suddenly need to switch to another branch to fix a bug or attend a meeting. But you don’t want to transfer your half-finished work and lose it at the same time. This is where git stash
comes into play.
You can think of it like a digital “desk drawer” for your work in progress. You hide your changes for later, tidy up your workspace and when you’re ready to continue working, you take them out again and pick up exactly where you left off.
Why you need Git Stash
Why is git stash
so useful? Here are some common scenarios where it comes in handy:
- Quickly switching branches: If you need to switch to another branch to check something or fix a bug, but don’t want to commit your current work, you can store it in the stash.
- Keeping the working directory clean: Git encourages you to commit your code often, but what if you’ve made changes that aren’t ready to be committed? With stashing, you can set those changes aside and keep your working directory clean.
- Multitasking: Sometimes you get interrupted by an urgent task or other work. Instead of undoing your changes or making unnecessary commits, put your current work aside and come back to it later.
Basic use of Git Stash
Now that you know why git stash
is useful, let’s look at its basic usage. The beauty of git stash
is that it’s so simple that even as a beginner you’ll quickly get the hang of it.
How to save your changes
To cache your changes, simply run :
bash git stash
This command saves your changes, including tracked and untracked files, and resets your working directory to the last commit. Basically, it’s like setting the current state of your work to “pause”.
Viewing your stashes
After stashing, you may want to see which stashes you have created. Git saves a list of all your stashes in the stash stack. To view them, run :
git stash list
You’ll see a list that looks something like this:
stash@{0}: WIP on feature-branch: a123456 Initial commit stash@{1}: WIP on feature-branch: 0987654 Feature X added
This list shows the stashes you have created, along with the branch they were created from and the commit hash.
Apply stashed changes
To apply the changes from your last stash back to your working directory, use
git stash apply
This command leaves the stash in the stash list, but applies the changes to your current working directory. If you want to apply a specific stash, you can reference it via its index:
git stash apply stash@{1}
Delete a stash
If you no longer need a stash and want to delete it, use :
git stash drop stash@{0}
This will remove the stash from the list and free up space. If you want to delete all stashes at once, execute :
git stash clear
But be careful: once a stash has been cleared, it’s gone forever!
—
Advanced Git stash commands
Once you’re familiar with the basics, there are some advanced ways to use `git stash` that make it even more powerful.
Stash specific files
Sometimes you may not want to stash everything — maybe there’s just one file you want to stash temporarily. To stash specific files, you can use the following:
git stash push
For example:
git stash push src/app.js
As a result, the changes are only saved in `src/app.js`, other files remain unaffected.
Creating a branch from a Stash
If you realize that the work you have hidden actually deserves its own branch, you can create a new branch from the stash:
git stash branch
This will automatically apply the stash to the new branch and check it out.
Stash Pop vs. Stash Apply
You may notice two commands that seem to do the same thing: `stash apply` and `stash pop`. Here is the crucial difference:
– `git stash apply`: This command applies the stash, but keeps it in the stash list.
– `git stash pop`: The stash is applied and then removed from the stash list.
So if you know that you no longer need the stash, “stash pop” is the right way for you.
Keep or discard changes after the stash
Sometimes you want to stash changes but keep certain unconfirmed files in your working directory. You can use the `–keep-index` option for this:
`bash git stash push –keep-index
This will only cache the files that have not been transferred and the rest will remain intact.
Common Git Stash use cases
Now that you know how to use Git stash, let’s look at some real-world use cases where you can utilize it the most.
Interruptions during coding
Imagine you’re working on a new feature, but your boss comes by and tells you to fix a bug right away. You’re halfway through your work and don’t want to hand over the code unfinished. A perfect scenario for git stash
!
git stash git checkout bugfix-branch
Now you can fix the bug, and when you’re done:
bash git checkout feature-branch git stash pop
And you’re right back where you left off!
Switch between branches
Sometimes you need to switch branches to try something out or run a test. Git won’t let you switch between branches if you have uncommitted changes, but you also don’t want to commit a bunch of changes at random. Here’s how to use `git stash` to solve this problem:
git stash git checkout another-branch
Do what you need to do git checkout feature-branch git stash pop
Clean up uncommitted changes
Suppose you’ve experimented with different approaches and now want to clean up your working directory without committing your failed attempts. Instead of losing the work, you hide it:
git stash git stash apply
This will make it easier for you to remember the contents of the individual stashes when you list them later.
Later you can go through the stash to find all the useful parts.
Best practices for using Git Stash
As with any tool, there are right and wrong ways to use Git stash. Here are some best practices to make sure you’re using it efficiently.
Name your stashes
If you have multiple stashes, it can be confusing to keep track of what each one stands for. That’s why it’s a good idea to give your stashes meaningful names:
git stash push -m “In progress on feature X”
Manage multiple stashes
You may end up with several stashes over time. Don’t let them pile up! Regularly clear out the stashes that you no longer need:
git stash drop
or
bash git stash clear
Know when not to use Stash
While `git stash` is great, it’s not a panacea. When your changes are ready for review or collaboration, it’s better to create a separate branch instead of stashing them indefinitely. Overuse of stash can lead to work being forgotten.
Git Stash alternatives and complementary tools
Although `git stash` is incredibly useful, there are times when other Git features are better suited.
– git commit –amend: If your changes are small and relevant to your current commit, you should modify your last commit instead of stashing it.
– Git cherry-pick: To move individual commits to other branches.
-Feature branches:If you’re working on something long-term or experimental, it may make more sense to create a new branch instead of relying on stashes. This makes it easier to track your changes and collaborate with others.
git checkout -b feature/new-feature
By using a branch instead of a stash, you can make incremental commits, which is often the better method in collaborative environments.
Conclusion
git stash is an incredibly powerful tool for managing your development workflow. It allows you to pause your work, switch tasks, and come back later without having to deal with incomplete commits or lost work. Whether you’re dealing with interrupts, switching between branches, or simply cleaning up uncommitted changes, Git stash has you covered.
Let’s summarize the most important points:
- git stash” temporarily stores your unconfirmed changes and allows you to return to them when you’re ready.
- You can view, apply and delete stashes with a series of commands such as
git stash list
,git stash apply
andgit stash drop
. - Advanced features, such as hiding certain files or creating branches from stashes, allow you to customize
git stash
to your needs. - If you name your stashes and manage them carefully, you can keep track of them.
- Don’t overdo it with the stash — when it’s time to create a feature branch or make a commit, just do it!
If you incorporate git stash
into your daily development habits, you’ll soon find that it makes your workflow smoother, less stressful and more flexible. It’s one of those tools that, once mastered, will make you a much more efficient and agile developer.
Have fun programming! And don’t forget: stash responsibly!

