我进了一个分店做了一些工作。我想进入另一个分支,但不想承诺,所以我做了git stash
。然后我做了git checkout <otherbranch>
。我在那里做了一些工作,就像在第一个分支中一样,我想在提交工作之前切换它。所以我也在那里做了git stash
。我切换回第一个分支并尝试解除它(git stash pop
)认为它会从特定分支中获取存储。我很惊讶它从<otherbranch>
(最近被藏起来)中取出了藏匿物。我的印象是存储是特定于分支的,但是这种行为表明整个本地存储库只有一个存储。
git stash
是特定于分支还是整个存储库?如果是整个存储库,我可以将选项传递给它以使其特定于分支吗?
要查看当前的存储堆栈:
git stash list
要从堆栈中选择特定的存储,请通过上面显示的stash@{number}
引用它。
如果您希望行为是每个分支,则可以在分支上进行提交(或多次提交)。您可以随时“取消”提交(例如,使用git reset
,--soft
或--mixed
;请参阅git reset documentation;或使用git rebase -i
仅保留最终的“真实”提交,同时丢弃临时值)。
(为了真正模拟git stash
,你需要至少两次提交,一次用于索引状态,一次用于工作树状态。但是,如果你不打算保存和恢复索引状态,你可以只是git add -A
整个工作 - 树状态并将其置于临时提交中。或者,git stash
是一个shell脚本,因此您可以非常轻松地复制和修改它,使其默认工作在每个分支上,使用例如refs/pb-stash/branch
作为其工作名称空间,而不是整个仓库的单一全球refs/stash
。您仍然可以通过明确命名将一个藏匿点从一个分支带到另一个分支。)
No和No. git stash是per-repository。
Here是一个关于如何使用它的好页面。
git stash
不是每个分支。
git stash
(当你有很多的存储和分支时,它很容易丢失)git commit
来保存你的分支中未完成的代码,当你准备完成代码时,做一个git reset ${COMMIT_HASH_VALUE}
来获取未完成的代码git commit
和git reset
正确使用时可以模拟特定分支的git stash
这是一个常见的现实生活场景,演示了commit
和reset
命令的价值和用法:
git commit
记下COMMIT_HASH_VALUE
以供日后使用git reset ${COMMIT_HASH_VALUE}
(仅供参考,git reset
的默认值为--mixed
)