【问题标题】:BFG restore deleted files in historyBFG 恢复历史中删除的文件
【发布时间】:2017-11-03 00:14:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: git bfg-repo-cleaner


    【解决方案1】:

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

    为什么会这样

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-06-11
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      相关资源
      最近更新 更多