2

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

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

有没有办法恢复原来的历史?意味着添加使用 BFG 删除的所有版本?简单地撤消 BFG 所做的一切。

4

1 回答 1

2

除了这个没有简单的方法:如果你有以前的克隆,就用它。

为什么会这样

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

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

这两个命令还生成一个与旧提交和新提交相关的映射文件。BFG 保留此地图文件(这是正确的做法),而git filter-branch在过滤过程结束时将其丢弃(这是错误的做法)。如果你有地图,你就有一种方法——不是一种简单的方法,而是一种方法——将新历史与旧历史关联起来。

这将允许您执行您的建议。但是,要使其正常工作,您必须有权访问旧存储库……在这种情况下,您不妨只使用旧存储库。

如果从那以后你有新的提交怎么办?

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

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

于 2017-11-03T00:35:38.353 回答