问题
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.
回答1:
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.
回答2:
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
the git book
info git-stash
and search on option=branch
.
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
回答3:
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!
回答4:
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.
来源:https://stackoverflow.com/questions/89487/why-isnt-the-git-stash-unique-per-branch