How to Stash Git Changes

There are times when you need to switch branches to work on another project.The git stash command comes to rescue. It is used to stash the dirty state of the working directory and saves it on a stack of incomplete changes that can be re-applied later.

1. Stashing Your Work

  • Firstly, you can run the git status so you can see the dirty state:
git status
  • Run git stash to stash the changes:
git stash

2. Multiple Stashes

  • The git stash command can also be used to create multiple stashes. Use the git stash list to view them. The code looks like this:
git stash list

3. Re-applying Your Changed Stashes

  • Run git stash pop to remove the changes from your stash and re-apply them to your working copy.
git stash pop
  • Run git stash apply , if you want to re-apply the changes and keep them in your stash:
git stash apply

4. Stashing Changed Stages

  • If the file you staged wasn’t restaged, you should run the git stash apply command with an --index option:
git stash apply --index

5. Cleaning up Stashes

  • Run stash drop with the name of the stash to remove it:
git stash drop

6. Un-applying a Stash

  • If you want to un-apply the most recent stash, use the git stash show -p command:
git stash show -p | git apply -R

Stash Meaning

The git stash command git stash shelves changes you have made to your working copy so you can do another work, and then come back and re-apply them. It takes uncommitted both staged and unstaged changes, saves them away for further use, and then returns them from your working copy.

Multiple Stashes

As mentioned above, you can also create multiple stashes. By default, stashes are identified as a "WIP" – work in progress. It comes on top of the branch and commit that you created the stash from.

Staged and Unstaged Changes

Running git stash will stash both git changes not staged for commit and the ones staged for it. But git stash will not stash new files that have not yet been staged and the ones that have been ignored. In those cases, the -u option (or --include-untracked) helps also stash the untracked files.

git stash -u

You can add changes to ignored files as well by using the -a option (or --all) when running git stash.

git stash -a

How to Apply Patch

Git does not support a stash unapply command, but it is possible to unapply the stash by retrieving the patch associated with a stash and applying it in reverse:

git stash show -p stash@{0} | git apply -R

Git assumes the most recent stash, if you don’t specify a stash,:

git stash show -p | git apply -R

But there also exists git undo extension that makes it easier and more convenient undoing commits, applying stashes and pushed merges.


Do you find this helpful?

Related articles