git - 如何从 Git 存储库的提交历史记录中移除/删除大文件?

标签 git version-control git-rebase git-rewrite-history

我不小心将 DVD-rip 放到了一个网站项目中,然后不小心 git commit -a -m ...,然后,zap,repo 膨胀了 2.2 gigs。下次我做了一些编辑,删除了视频文件,并提交了所有内容,但压缩文件仍在存储库中,在历史记录中。

我知道我可以从这些提交开始分支并将一个分支 rebase 到另一个分支。但是我应该怎么做才能 merge 2 次提交,以便大文件不会显示在历史记录中并在垃圾收集过程中被清除?

最佳答案

使用 BFG Repo-Cleaner ,一个更简单、更快速的 git-filter-branch 替代方案,专门用于从 Git 历史记录中删除不需要的文件。

仔细遵循usage instructions ,核心部分就是这样:

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

任何大小超过 100MB 的文件(不在您的最新 提交中)将从您的 Git 存储库的历史记录中删除。然后你可以使用 git gc 清除死数据:

$ git reflog expire --expire=now --all && git gc --prune=now --aggressive

剪枝后,我们可以强制推送到远程repo*

$ git push --force

*注意:不能在 GitHub 上强制推送保护分支

BFG 通常至少为 10-50x比运行 git-filter-branch 更快,而且通常更易于使用。

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

关于git - 如何从 Git 存储库的提交历史记录中移除/删除大文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2100907/

相关文章:

Git:如何压缩分支上的所有提交

Git 不准确地检测 merge 冲突

git - 你如何重命名 git 中的文件夹并使用交互式 rebase stash 它?

git rebase 在其他分支上

git - 显示有关 git commit 'without diff' 但 'with' 文件的信息

git - 是否无法在 Jenkinsfile 中 checkout 不同的分支?

java - 在Eclipse(STS)中设置两个maven git项目的master分支

作者姓名为 "/CN=myname"的 Git svn 克隆

sql-server - 如何将 BIDS 解决方案置于源代码控制之下?

git - git merge-git : what is the correct merging or rebasing workflow to modify a maintenance branch and apply those patches to another branch?