从git中完全删除文件夹

时间:2016-10-07 05:49:53

标签: git

要从git中删除名为 build 的文件夹,请使用:

git rm --cached -r build

我从这个answer中学到了。

但是,IIUC,该目录仍保留在git的数据库中。

我测试了这个问题:

  1. 初始化了一个新的git存储库。
  2. 添加了一个名为 build 的新目录,其中包含一个大文件(7MB)并已提交。
  3. 执行:

    git rm --cached -r build
    
  4. .git 目录的大小仍然是7mb,这意味着未跟踪和删除并没有改变git历史记录,而是应该擅自改变。

    完全清理错误提交的目录的方法是什么,该目录已经提交了几次提交?

    在我的情况下,因为我只是在我的第三次提交而没有关注项目的历史,我删除了 .git 文件夹并重新开始,但我想知道是否有更好的方法

3 个答案:

答案 0 :(得分:2)

答案与从所有历史记录中删除单个文件(具有所有相同的警告)相同,除了指示过滤器删除一个文件,而不是指示它删除以该路径开头的所有文件,例如,git rm --cached -rf path/to/directory作为--index-filter git filter-branch。例如,请参阅this answerHow to remove/delete a large file from commit history in Git repository?另请参阅Completely remove file from all Git repository commit history

请注意,在使用git filter-branch(您应该在克隆上执行此操作)之后,缩小存储库的最简单方法 - 现在最多两倍 commit,因为过滤器不能改变现有的提交,只能将它们复制到更正的新提交 - 是克隆过滤的克隆。

答案 1 :(得分:1)

通常,您需要重写提交历史记录,以便从所述提交中清除大文件。

一个好工具是BFG Repo cleaner:它比原生git filter-branch

更快
java -jar bfg.jar --strip-blobs-bigger-than 5M some-big-repo.git

一旦您过滤了提交,您仍然需要应用git gc/repack/prune才能使大小真正下降。

答案 2 :(得分:1)

git filter-branch --tree-filter 'rm -rf src/folder' HEAD

git rm仅从工作树中删除