BFG恢复历史记录中已删除的文件

时间:2017-11-03 00:14:09

标签: git bfg-repo-cleaner

BFG用于从历史记录中删除文件。在此过程中,写入了deleted-files.txt。

以前的克隆仍包含已删除的文件... git cat-file -p xxx(xxx,如deleted-files.txt中所述)

有没有办法恢复原始历史记录?是否使用BFG添加删除的所有版本?简单撤消BFG所做的一切。

1 个答案:

答案 0 :(得分:0)

除了这个之外没有简单的方法:如果你有前一个克隆,只需使用它。

为什么会这样

任何Git存储库中的历史记录都包含该存储库中的提交。

从技术上讲,删除文件是不可能的。 BFG不这样做,git filter-branch也没有。相反,这些命令会生成 new 系列提交,这些提交有点像旧提交,但只是缺少文件。然后,他们更改分支名称(以及可选的其他引用),以便不记住旧的提交,而是记住新的提交。 Et voila,你有一个 new 存储库,不再与旧存储库兼容, new 提交形成了一个新的不同历史。

这两个命令还会生成一个与旧提交和新提交相关的映射文件。 BFG保留了这个映射文件(这是正确的事情),而git filter-branch在过滤过程结束时抛出它(这是错误的事情)。如果你有地图,你有一种方法 - 而不是简单方式,而是方式 - 将新历史与旧历史相关联。

这可以让你做你想要的。但是,要使其工作,您必须有权访问旧存储库...在这种情况下,您可能只使用旧存储库。

从那时起你有新的提交怎么办?

您可能不想只是切换回旧存储库的唯一原因是,如果您在进行转换后进行了新的提交。

如果您可以识别特定的新提交,并且您拥有旧的存储库,则可以将每个新提交转换为修补程序或git merge命令,并应用该修补程序或运行该{{1} }。这并不简单,但允许您将“仅限新repo”提交复制回旧存储库。有不止一种方法可以做到这一点,有各种优点和缺点,但它也不会很简单 - 无论如何它取决于能否列出这些“新的自过滤”提交。