哪些git命令可以删除你的藏匿处?

时间:2014-07-25 11:53:11

标签: git workflow temporary git-stash

我通常与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。但这通常是故意执行的。 但我会感兴趣的是,在执行其他操作时,您可能会遇到意外丢失的藏匿物,而不是采取行动:

  • git pull / fetch?
  • git reset?
  • 其他什么?

2 个答案:

答案 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

它将删除所有隐藏的更改。