哪些 git 命令可以删除你的存储文件?

3

我通常使用git stash save "What I´m working on",认为stash是存储临时代码的相对安全的地方。

但是我想知道哪些git命令可能会损害/删除我的stash,我应该小心谨慎,以免丢失我的工作。

当然,除了直接的git-stash命令,例如:

  • git stash drop <stash>
  • git stash pop
  • git stash clear

我找到的一个例子是git reflog expire --expire=30.days refs/stash。但这通常是有目的地执行的。 但我对在执行除了stash操作之外的其他操作时可能意外丢失stashes的情况很感兴趣:

  • git pull/fetch?
  • git reset?
  • 其他操作?
2个回答

3
嗯,存储库藏(stash)可能和未发布的提交一样安全。实际上,如果你查看创建存储库藏时所创建的对象,你会发现存储库藏是实际的提交。唯一的区别在于它们的访问方式不同。
因此,就像提交一样,只要还有“某个东西”指向存储库藏,它们就不会被任何东西自动删除。对于普通的提交,通常有一个分支、标签或另一个提交指向它,但对于存储库藏,实际上有两个指向该对象的位置:
最新的存储库藏存储在.git/refs/stash中。当你使用没有特定参数的stash命令时,就会使用这个位置。除非你清除了引用(正常使用情况下不太可能发生),否则这个位置很安全。
其他的储藏,即完整的储藏列表,存储在该引用的ref-log中。因此,信息存储在.git/logs/refs/stash中。现在,默认情况下,reflogs中不可达的条目将在30天后受到垃圾回收(git gc --auto)。但是,这不适用于储藏reflog,它实际上是单独处理的。

因此,除非您手动修剪储藏的reflog,否则其他命令不会触及您的储藏。

即使指针从储藏列表中消失(出于任何原因),您仍然可以尝试使用git fsck --lost-found恢复那些储藏提交一段时间。

2
有没有关于分离处理存储库reflog的文档指针? - user1338062

1

git stash clear

这将删除所有存储的更改。


1
你说得对,我忘记写了。 我主要对非git-stash命令感兴趣。 - Kamafeather

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接