我对git很新,并对存储有一些疑问。如果我在一个分支机构工作但是无法到达我可以提交分支的位置,那么使用存储是正确的。我关于藏匿的问题是:
如果有人可以迅速帮助澄清这些将非常感激。
1 - 保存了多少个藏匿处?
圣物不会出现在空气中;只有你创建它们,使用
git stash
或者,等效地,
git stash save
那么有多少人被救了?和你一样多。
2 - 这些藏匿处存放了多长时间?
这个问题看起来很无辜,但答案其实很微妙。这里要考虑两个方面:1)存储reflog,以及2)存储库的对象数据库。
当你创建一个藏匿,Git
--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 - 他们是否只是暂时保存工作,以便在重新启动计算机时丢失更改?
不存在与任何其他提交对象没有区别;重启对他们没有影响。
Git stashes被保存,直到您的硬盘死亡(不像提交,通常通过git push
传输到其他计算机,因此将比硬盘故障更长)。
你可以拥有任意数量的藏匿处。当你想通过运行git stash drop
或git stash clear
(阅读那些文档)时,摆脱旧的。