为什么每个分支的 Git 存储不是唯一的?

我想它允许将更改从一个分支移动到下一个分支,但是这就是初选的目的,如果您没有提交您的更改,也许您不应该移动它们?

我有时会在错误的分行应用错误的存货,这让我对这个问题感到困惑。

18853 次浏览

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!

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.

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.

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