此问题在此处已有答案:
How to remove/delete a large file from commit history in the Git repository?(22个答案)
六年前关闭了。
要从git中删除名为build的文件夹,我用途:
git rm --cached -r build
我从这个answer中学到的。
但是,IIUC,目录仍然在git的数据库中。
我测试了一下:
1.初始化一个新的git仓库。
1.添加了一个名为build的新目录,其中包含一个大文件(7MB)并已提交。
1.执行日期:
git rm --cached -r build
.git目录的大小仍然是7mb,这意味着取消跟踪和删除并没有改变git的历史记录,这是应该的。
有什么方法可以完全清理一个错误提交的目录,这个目录是在几次提交之后提交的?
在我的情况下,因为我只是在我的第三次提交,很少关心项目的历史,我删除了**.git**文件夹并重新开始,但我想知道是否有更好的方法。
3条答案
按热度按时间nuypyhwy1#
答案与从所有历史记录中删除单个文件相同(具有所有相同的警告),除了不是引导过滤器删除一个文件,而是引导它删除以该路径开始的所有文件,例如,
git rm --cached -rf path/to/directory
作为您的--index-filter
与git filter-branch
。参见,例如,this answer到How to remove/delete a large file from commit history in Git repository? See also Completely remove file from all Git repository commit history。请注意,在使用
git filter-branch
(你应该在克隆上这样做)之后,最简单的方法来 * 收缩 * 存储库-现在有多达 * 两倍 * 的提交,因为过滤器不能改变现有的提交,只能将它们复制到正确的新提交-是克隆过滤后的克隆。uoifb46i2#
git rm
仅从工作树中删除fcg9iug33#
通常,你需要重写提交的历史记录,以便从所述提交中清除大文件。
一个很好的工具是BFG Repo cleaner:它比原生
git filter-branch
更快一旦你过滤了你的提交,你仍然需要应用git gc/repack/prune,以使大小实际上下降。
现在(2020年以后),您可以将
git filter-repo
用作I did here: