Git | Working with Stash

Git allows multiple users to work on the same project simultaneously. Suppose if a developer is working on a feature in a branch and he needs to pull changes from some other developer’s branch or if he has to work urgently on some other feature, but the feature he is currently working on is incomplete. In this case, you cannot commit the partial code of the currently working feature. To add this new feature, you have to remove your current changes and store them somewhere else. For this type of situation, Git offers a very useful command known as ‘git stash‘.
git stash command saves the previously written code and then goes back to the last commit for a fresh start. Now you can add the new feature without disturbing the old one as it is saved locally. After committing the new feature you can go on with working on the old feature which was incomplete and uncommitted.

Stashing current changes

To save the uncommitted changes for later usage, you can use the git stash command. This command saves your local modifications away and reverts the working directory to match the HEAD commit, so it will give you clean working directory.

git stash

git stash
By default, running git stash will stash the changes that have been added to your index (staged changes) and changes made to files that are currently tracked by Git (unstaged changes). To stash your untracked files, use git stash -u.

Listing Multiple Stashes

You can create multiple stashes and view them using the git stash list command. Each stash entry is listed with its name (e.g. stash@{1}), the name of the branch that was current when the entry was made, and a short description of the commit the entry was based on.

git stash list

git stash list
To provide more context to the stash we create the stash using the following command:



git stash save "message"

Getting back the Stashed changes

You can reapply the previously stashed changes with the git stash pop or git stash apply command. The only difference between both the commands is that git stash pop removes the changes from the stash and reapplies the changes in the working copy while git stash apply only reapplies the changes in the working copy without removing the changes from the stash. In simple words, “pop” removes the state from the stash list while “apply” does not remove the state from the stash list.

git stash pop

git stash pop

git stash apply

git stash apply
By default git stash pop or git stash apply will reapply the most recently created stash: stash@{0}
To choose which stash to apply, you can pass the identifier as the last argument (For eg.:- git stash pop stash@{2}).

Viewing Stash Summary

git stash show command is used to display the summary of operations performed on the stash.

git stash show

git stash show

Creating a Branch from stash

If you want to create and check out a new branch starting from the commit at which the stash was originally created and also apply the changes saved in stash, use git stash branch branch_name stash_name. It drops the stash which is given as the argument and if no stash is given, it drops the latest one.

git stash branch newbranch stash@{0}

git stash branch

Deleting Stashes

To delete any particular stash (For ex:– stash@{1}), use git stash drop stash@{1}. By default this command will drop stash@{0} if no argument is provided (git stash drop).
To delete all stashes at once, use git stash clear command.
git clear & git drop

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

7


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.