从git历史记录中删除已删除的文件夹

Mar*_*uer 12 git

如何删除已从git历史记录中删除的文件夹?

在我的git存储库中,我有一个名为/foo(1.2GB大小)的文件夹.我删除了beause 的文件夹foo,rm -rf /foo我不再需要了.经过许多其他提交,我想.为什么我的远程回购如此之大......我忘了做git rm --cached ...而不是做rm -rf ....我现在如何从git历史记录中删除该文件夹?

git rm --cached /foo 将无法正常工作,因为该文件夹已在先前的提交中删除.

use*_*342 26

文档涵盖了从历史记录中清除文件的类似情况:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD
Run Code Online (Sandbox Code Playgroud)

由于您要删除整个目录,请将-r标志添加到git rm:

git filter-branch --index-filter \
                  'git rm -r --cached --ignore-unmatch path/to/directory' HEAD
Run Code Online (Sandbox Code Playgroud)

请注意,此操作将在较大的存储库上花费几分钟.

更重要的是,它将创建一个具有不同历史和校验和的新存储库.如果您之前发布了存储库,则新存储库的历史记录将与其他人提取的历史记录不兼容.

  • 你的`filter-branch`命令对我不起作用.我找到[这里]一个(http://stevelorek.com/how-to-shrink-a-git-repository.html),做:`git的过滤分支--tag名滤波器猫--index过滤器'git rm -r --cached --ignore-unmatch filename' - prune-empty -f - --all` (13认同)