git保存了多长时间/多长时间?

时间:2014-10-04 07:54:56

标签: git git-stash

我对git很新,并对存储有一些疑问。如果我在一个分支机构工作但是无法到达我可以提交分支的位置,那么使用存储是正确的。我关于藏匿的问题是:

  1. 保存了多少个藏匿处?
  2. 这些藏匿处存放了多长时间?
  3. 他们只是暂时保存工作,以便在重新启动计算机时丢失更改吗?
  4. 如果有人能够迅速帮助澄清这些,我们将非常感激。

2 个答案:

答案 0 :(得分:23)

  

1 - 保存了多少个藏匿处?

Stashes不会凭空出现;只有你使用

创建它们
git stash

或等同地

git stash save

那么节省了多少?和你一样多。

  

2 - 这些藏匿处存放了多长时间?

这个问题看起来很无辜,但答案其实很微妙。这里要考虑两个方面:1)存储reflog,以及2)存储库的对象数据库。

创建存储时,Git

  • 在stash reflog中添加一个条目,
  • 在存储库的数据库中创建两个(如果使用--include-untracked标志,则为三个)提交对象:一个对应于工作树中的WIP(正在进行中),另一个对应于您的临时区域(又名索引)的状态。

编辑:这些提交对象是真正的提交,可以通过在它们上运行git cat-file -t来验证。他们碰巧无法从任何分支机构到达;见torek's comment

默认情况下,Git的垃圾收集会自动删除超过90天的reflog条目;你可以指定一个不同的"生命周期"对于stash reflog条目,通过运行

git config gc.refs/stash.reflogexpire <lifetime>

除了上面描述的垃圾收集机制外,Git不会自行删除存储空间;只要您不自愿

,存储将保留在您的本地存储库中(至少90天)
  • 使用

    删除
    git drop <stash-reference>
    

    从stash reflog中删除指定的存储条目;

  • pop ,使用

    git pop <stash-reference>
    

    应用指定的存储,然后从存储reflog中删除相应的条目;或

  • 运行

    git stash clear
    

删除存储reflog的所有条目(注意那个)。

但是,请注意,这三个操作仅影响存储reflog。特别是,他们不会立即导致相关的&#34; WIP&#34;和&#34;索引&#34;要从存储库的数据库中删除的对象;他们只是让那些物体无法到达。后者将保留在&#34;存储库中。有一段时间,直到他们最终被垃圾收集并死于真正的死亡&#34;。

这是一件有用的事情:如果你不小心掉落藏匿物,你仍然可以从你的仓库的内脏中找回它,如果你能记住或识别你的它的两个对象(WIP和索引)。

  

3 - 他们是否只是暂时保存工作,以便在重新启动计算机时丢失更改?

没有。 Stashes与任何其他提交对象没有什么不同;重启对他们没有影响。

答案 1 :(得分:3)

Git stashes被保存,直到您的硬盘死亡(与提交不同,通常通过git push传输到其他计算机,因此将比硬盘故障更长)。

你可以拥有任意数量的藏匿处。通过运行git stash dropgit stash clear(阅读相关文档),在您感觉到的时候摆脱旧的。