【发布时间】:2013-10-29 05:04:52
【问题描述】:
如果我在分支中,例如test 并且有一些工作。如果我执行git stash 并切换到master 分支,如果我执行git stash clear 是否会丢失我在test 中保存的工作?还是每个分支都有单独的存储堆栈?
【问题讨论】:
如果我在分支中,例如test 并且有一些工作。如果我执行git stash 并切换到master 分支,如果我执行git stash clear 是否会丢失我在test 中保存的工作?还是每个分支都有单独的存储堆栈?
【问题讨论】:
没有。 Stashes 实际上是 reference 的 reflog(有点像“隐藏分支”,如果你愿意的话):refs/stash
所以,
git reflog refs/stash
e41a1b8 refs/stash@{0}: WIP on master: 42092ec PoC
大致相当于
git stash list
stash@{0}: WIP on master: 42092ec PoC
所以只有一个“分支”包含所有存储。
这个答案可能会更清楚:Is it possible to push a git stash to a remote repository?
您可以通过执行“推断”存储适合的分支,例如
git branch -a --contains stash@{0}^
(询问:哪些分支包含此存储的父修订?)
【讨论】:
refs/stash 本身并不是一个真正的分支。 (它 is 是一个引用,就像分支和标签是引用一样;但注释也是如此。)git stash branch ... 将允许您将任何给定的存储 into 更改为一个分支,尽管(通过检查父级,然后创建新分支并应用存储)。因此,如果你有一个 stash 并决定它应该成为一个分支,那很容易做到。
git stash branch :) 或者我对 git 的使用早于那个子命令(?)。无论如何,很高兴知道这一点。