我通常与git stash save "What I´m working on"
合作,认为藏匿处是存放临时代码的安全地点。
但是我想知道哪些 git 命令可能会损害/删除我的藏匿,而且我应该小心谨慎,不要失去我的工作。
显然,对于直接 git-stash 命令,例如:
git stash drop <stash>
git stash pop
git stash clear
我找到的一个例子是git reflog expire --expire=30.days refs/stash
。但这通常是故意执行的。
但我会感兴趣的是,在执行其他操作时,您可能会遇到意外丢失的藏匿物,而不是采取行动:
答案 0 :(得分:2)
好吧,藏匿可能和(未发布)提交自己一样安全。实际上,如果您在创建存储时查看创建的对象,您将看到存储是实际提交。唯一的区别是它们的访问方式不同。
所以,就像提交一样,只要某些东西仍然指向存储,它们就不会被任何东西自动删除。对于正常提交,您通常有一个分支,标记或其他提交点,但对于stashes,您基本上有两个地方存在指向该对象的指针:
最新的藏匿存储在.git/refs/stash
中。这是在没有特定参数的情况下使用stash命令时使用的内容。除非你清除refs - 正常使用可能不会发生 - 这个地方是安全的。
其他存储区,即完整的存储列表,存储为该引用的ref-log。因此,信息存储在.git/logs/refs/stash
中。现在,reflog中的无法访问的条目默认在30天后进行垃圾收集(git gc --auto
)。 除之外,这不适用于存储reflog,实际上是单独处理的。
因此,除非您手动修剪存储的reflog,否则其他命令将不会触及您的藏匿处。
即使指针从存储列表中消失(无论出于何种原因),您仍然可以尝试使用git fsck --lost-found
恢复那些存储提交一段时间。
答案 1 :(得分:0)
git stash clear
它将删除所有隐藏的更改。