如果你重写历史记录,git会保留旧文件一段时间吗?

时间:2017-02-28 00:10:37

标签: git

我意外地将敏感信息提交到存储库,然后强行推送以从公共存储库中删除该提交。

之后我更改了所有暴露的密码。

这是关于git的技术问题。删除提交的记录是否仍然存在于我的本地git存储库中?它会在一段时间后消失吗?这记录在哪里?

1 个答案:

答案 0 :(得分:1)

push --force后,旧历史'提交仍然是存储库的一部分。它们无法通过任何分支访问。 (讨论了由push --force here引起的悬空提交。如果没有对提交的引用,则提交将变为悬空并将由git gc进行垃圾收集(有关git gc文档,请参阅here)。

但是,只要有任何对提交的引用,就不会对其进行垃圾回收。如果没有分支,并且没有指向提交的标记,并且不再从reflog引用它,则会出现这种情况。 reflog部分在this discussion中进行了解释。

所以,答案是肯定的,你的旧提交将继续存在,是的,它们会在一段时间后消失,但很难分辨出来。您可以尝试手动删除所有引用(通过分支/标记删除,如果相关,并git reflog --expire=<time>用于reflog引用,请参阅here)。

为了更深入地了解内心深处,我可以推荐this条。