tags:

views:

918

answers:

3

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.

+4  A: 

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!

Patrick_O
+8  A: 

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.

Aristotle Pagaltzis
+2  A: 

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.