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

问题描述 投票:14回答:2

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

  1. 保存了多少个藏匿处?
  2. 这些藏匿处存放了多长时间?
  3. 他们只是暂时保存工作,以便在重新启动计算机时丢失更改吗?

如果有人可以迅速帮助澄清这些将非常感激。

git git-stash
2个回答
23
投票

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

圣物不会出现在空气中;只有你创建它们,使用

git stash

或者,等效地,

git stash save

那么有多少人被救了?和你一样多。

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

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

当你创建一个藏匿,Git

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

编辑:那些提交对象是真正的提交,可以通过在它们上运行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> 从存储reflog中删除指定的存储条目;
  • 弹出它,使用 git pop <stash-reference> 它应用指定的存储,然后从存储reflog中删除相应的条目;要么
  • git stash clear

删除存储reflog的所有条目(小心那个)。

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

这是一个有用的事情要知道:如果你不小心丢下一个藏品,你仍然可以从你的仓库的内脏中检索它,如果你能记住或识别它的两个对象(WIP和索引)的SHA。

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

不存在与任何其他提交对象没有区别;重启对他们没有影响。


3
投票

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

你可以拥有任意数量的藏匿处。当你想通过运行git stash dropgit stash clear(阅读那些文档)时,摆脱旧的。

© www.soinside.com 2019 - 2024. All rights reserved.