Git 中清除历史记录中的大文件夹或大文件
在 Git 中清除历史记录中的大文件夹或大文件,可以通过以下步骤实现。这通常需要使用 git filter-repo
或 git filter-branch
工具。以下是推荐的方式:
方法 1:使用 git filter-repo
(推荐)
git filter-repo
是一个更现代、更高效的工具,适合清理历史记录。
步骤:
-
安装
git filter-repo
如果尚未安装,可以通过以下方式安装:1
pip install git-filter-repo
-
备份当前仓库
在操作之前,建议备份当前仓库,以防误操作导致数据丢失:1
cp -r your-repo your-repo-backup
-
清除大文件夹
假设你要清除名为large-folder
的文件夹:1
git filter-repo --path large-folder --invert-paths
--path
指定要操作的路径。--invert-paths
表示删除指定路径的内容。
-
强制推送到远程仓库
清理完成后,需要强制推送到远程仓库以覆盖历史记录:1
2bashgit push origin --force --all
git push origin --force --tags
方法 2:使用 git filter-branch
(较旧,不推荐)
git filter-branch
是 Git 的旧工具,效率较低,但仍然可以使用。
步骤:
-
备份当前仓库
和方法 1 一样,先备份仓库:1
cp -r your-repo your-repo-backup
-
清除大文件夹
假设你要清除名为large-folder
的文件夹:1
2
3git filter-branch --force --index-filter \
"git rm -r --cached --ignore-unmatch large-folder" \
--prune-empty --tag-name-filter cat -- --allgit rm -r --cached
删除索引中的文件夹。--prune-empty
删除空的提交。
-
强制推送到远程仓库
清理完成后,强制推送到远程仓库:1
2git push origin --force --all
git push origin --force --tags
方法 3:使用 BFG Repo-Cleaner
BFG 是一个专门用于清理 Git 仓库的工具,操作简单且高效。
步骤:
-
下载 BFG
从 BFG Repo-Cleaner 官方页面 下载工具。 -
清除大文件夹
假设你要清除名为large-folder
的文件夹:1
java -jar bfg.jar --delete-folders "large-folder" your-repo.git
-
清理历史记录
运行以下命令清理历史记录:1
git reflog expire --expire=now --all && git gc --prune=now --aggressive
-
强制推送到远程仓库
1
2bashgit push origin --force --all
git push origin --force --tags
该封面图片由Bassel Zaki在Pixabay上发布
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 James的成长之路!
评论