如何删除git中一个文件的历史记录,只保留最新版本?

时间:2013-04-25 17:33:59

标签: git git-rewrite-history

我在git存储库中有一个大型二进制文件,在一些提交中已经更改了。这些提交还包括对其他文件的更改。我想在存储库中只有最新版本的二进制文件,但是希望保留在这些提交中更改的其他文件的历史记录。

所有提交的提交都已被推送到github,并由团队中的其他成员撤出。

我该怎么做?

编辑:我不认为这与其他引用的问题重复。如下面的评论中所述,我已经查看了该问题,但希望删除文件的每个版本,但最新版本除外。在另一个问题的答案中没有解决这个标准。

2 个答案:

答案 0 :(得分:4)

最简单的方法是使用The BFG Repo-Cleaner,这是git-filter-branch的一种更快,更简单的替代方案,专门用于从Git repos中删除大文件

您应该仔细遵循usage说明,但主要步骤就是这样 - 下载the Java jar(需要Java 7或更高版本)并运行此命令:

$ java -jar bfg.jar  --strip-blobs-bigger-than 100MB  my-repo.git

任何大小超过100MB的blob将从存储库的历史记录中完全删除 - 除非它是您最新提交的文件树中存在的版本< / strong>,因此您的最新版本将不受影响。

BFG也比git-filter-branch10-50x

完全披露:我是BFG Repo-Cleaner的作者。

答案 1 :(得分:1)

不要尝试过滤除最新版本以外的所有版本,只需从您的回购历史中查看该文件并重新添加最新版本:

考虑跟踪此文件。 Git不适用于大型二进制blob。