我走进一家分店,做了一些工作。我想进入另一个分支,但不想提交,所以我做了git stash。然后我做到了git checkout <otherbranch>。我在那里做了一些工作,就像在第一个分支中一样,我想在提交工作之前退出它。所以我git stash也在那里。我切换回第一个分支并尝试取消存储它(git stash pop),认为它会从该特定分支获取存储。我很惊讶它从<otherbranch>(最新的藏匿处)中取出藏匿处。我的印象是 stash 是特定于分支的,但这种行为表明整个本地存储库只有一个 stash。
git stash
git checkout <otherbranch>
git stash pop
<otherbranch>
是git stash特定于分支的还是针对整个存储库的?如果是针对整个存储库,我可以将选项传递给它以使其特定于分支吗?
要查看当前的存储堆栈:
git stash list
要从堆栈中选择特定的存储,请参阅上面显示的内容。stash@{*number*}
stash@{*number*}
如果您希望行为是每个分支的,您可以在分支上进行一次提交(或多次提交)。您可以随时“取消”提交(例如,使用git reset、--soft或--mixed;请参阅git reset 文档;或使用git rebase -i仅保留最终的“真实”提交,同时丢弃临时文件)。
git reset
--soft
--mixed
git rebase -i
(要真正模拟git stash,您至少需要两次提交,一次用于索引状态,一次用于工作树状态。但是,如果您不打算保存和恢复索引状态,则可以只提交git add -A整个工作树状态并将其放在临时提交中。或者,git stash是一个 shell 脚本,因此您可以很容易地复制和修改它,以使其在默认情况下在每个分支中工作,使用例如作为其工作命名空间,而不是单个全局整个仓库。您仍然可以通过明确命名将存储从一个分支带到另一个分支。)refs/pb-stash/*branch*``refs/stash
git add -A
refs/pb-stash/*branch*``refs/stash