我进了一个分店做了一些工作。我想进入另一个分支,但不想提交,所以我做了git stash
。然后我做了git checkout <otherbranch>
。我在那里做了一些工作,就像在第一个分支中一样,我想在提交工作之前切换它。所以我也在git stash
做了。我切换回第一个分支并试图解除它(git stash pop
)认为它将从该特定分支获取存储。我很惊讶它从<otherbranch>
(最近被藏起来)中取出了藏匿物。我的印象是stash是特定于分支的,但是这种行为表明整个本地存储库只有一个存储。
是git stash
特定于分支还是整个存储库?如果是整个存储库,我可以将选项传递给它以使其成为特定于分支的吗?
答案 0 :(得分:32)
否和编号git stash是每个存储库。
Here是一个关于如何使用它的好页面。
答案 1 :(得分:23)
要查看当前的存储堆栈:
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
。您仍然可以通过命名将一个存储从一个分支存储到另一个分支明确。)
答案 2 :(得分:4)
git stash
不是按分支的。
git stash
(当您有很多藏匿处和分支时很容易丢失)git commit
来将未完成的代码保存在分支中,当您准备完成代码时,请执行git reset ${COMMIT_HASH_VALUE}
来将未完成的代码取回 < / li>
git commit
和git reset
正确使用 可以模拟特定分支的git stash
这是一个现实生活中的常见场景,它演示了commit
和reset
命令的价值和用法:
git commit
COMMIT_HASH_VALUE
供以后使用git reset ${COMMIT_HASH_VALUE}
(仅供参考,git reset
的默认值为--mixed
)
答案 3 :(得分:2)
我不确定为什么这里的每个答案都建议使用commit
+ reset
模拟隐藏。 Stash非常好用,尤其是在多个分支上工作时。在多个分支上工作时,我也不想提交,因为我希望所有修改后的更改在返回时仍在编辑器中突出显示。
这是隐藏工作流程:
每当您必须切换分支但尚未准备好提交时,请将更改保存到堆栈中
git stash save "Your custom stash message"
返回分支时,请检查存储区
git stash list
如果您在分支机构FixIssue0203
上,可以使用git stash pop
,因为这将应用顶部的stash@{0}
并将其从存储中删除。
但是,如果您在分支ImproveReadme
中,则应首先应用存储1 git stash apply stash@{1}
,然后从堆栈git stash drop stash@{1}
中删除存储1。
就是这样!