Why isn't the git stash unique per branch?

GitGit Stash

Git Problem Overview


I suppose it allows for moving changes from one branch to the next but that's what cherry picking is for and if you're not making a commit of your changes, perhaps you shouldn't be moving them around?

I have on occasion applied the wrong stash at the wrong branch, which left me wondering about this question.

Git Solutions


Solution 1 - Git

As mentioned, if you want a “per-branch stash,” you really want a new branch forking off from the existing branch.

Also, besides the already mentioned fact that the stash allows you to pull into a branch that you’re working on, it also allows you to switch branches before you have committed everything. This is useful not for cherry-picking in the usual sense so much as for cherry-picking your working copy.

F.ex., while working on a feature branch, I will often notice minor bugs or cosmetic impurities in the code that aren’t relevant to that branch. Well, I just fix those right away. When time comes to commit, I selectively commit the relevant changes but not the fixes and cosmetics. Instead I stash those, which allows me to switch to my minor-fixes-on-stable branch, where I can then apply the stash and commit each minor fix separately. (Depending on the changes in question, I will also stash some of them yet again, to switch to a different feature branch, where I apply those.)

This allows me to go deep into programming mode when I am working, and not worry about proper librarianship of my code. Then when I take a mental break, I can go back and carefully sort my changes into all the right shelves.

If the stash weren’t global, this type of workflow would be far more difficult to do.

Solution 2 - Git

As of Git 1.6, you can now apply stashes to branches using

git stash branch name_of_new_branch

Git will create the new branch for you, and check it out! For more information, see

I'm guessing you can move stashes around using

git stash branch <branch | new_branch> [<stash>]

and to see a list of your stashes, use

git stash list

Reference

Solution 3 - Git

if you want a "stash" that runs off a branch do something like this to store your changes on a new branch off your current branch.

git checkout -b new_stash
git commit -a -m "stashed changes"

to undo the stash

git reset HEAD^
git branch -d new_stash

git stash is especially useful because you can pull changes into a dirty tree, i.e. if you have outstanding edits and want to do a

git pull

and you can't, you can stash your changes, pull and then apply the stash

git stash
git pull
git stash apply
git stash clear

hope this helped!

Solution 4 - Git

git-stash is most useful to me to move not-yet-checked-in changes off to a different branch than the one that is currently checked out.

For example - I often find myself doing simple changes on a bug-fixes branch; only to find that a change I'm working on is more complex than I first guessed. Git-stash is the easiest way to move that set of changes to a different branch.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionirosView Question on Stackoverflow
Solution 1 - GitAristotle PagaltzisView Answer on Stackoverflow
Solution 2 - GitIgbanamView Answer on Stackoverflow
Solution 3 - GitPatrick_OView Answer on Stackoverflow
Solution 4 - GitjmxzView Answer on Stackoverflow