【发布时间】:2014-12-14 10:43:08
【问题描述】:
我读过这篇文章: http://jenkins-ci.org/content/summary-report-git-repository-disruption-incident-nov-10th
描述了用户意外从存储库的过时状态触发git push --force 的事件。
当然,这需要进行一些清理以恢复原始状态分支。但由于 Git 从不删除信息,据我所知,此清理过程始终是可能的。
因此,即使您 rebase、push --force(和其他可能重写历史的操作)原始提交仍然存在,它们只需要被发现对吗?
简而言之,git 中的任何(破坏性)操作实际上会删除数据吗?
【问题讨论】:
-
好吧,如果你 gc+prune 之后它就会消失。或者只是等待。 alblue.bandlem.com/2011/11/…
-
是的,在
commit --amend(参见this)、rebase、强制推送等操作之后变得无法访问的对象会在 repo 的对象数据库中存活一段时间。尽管这些对象最终会被垃圾回收,但默认情况下,此过程不会立即进行,并给您一些时间来修复混乱。 -
此外,只要对象可以从 reflog 中访问,它们就不会被删除。 reflog 是您的安全网,您可以使用它来修复错误。
标签: git garbage-collection object-oriented-database