Git 从所有提交中删除文件

Git remove file from all commits

我犯了一个 "little" 错误并向我的本地存储库添加了一个 "little" (>100MB) 文件。

两次提交后,我试图推送到 github 中限制为 100MB 的远程回购。

我可以使用 git rm --cached 从我当前的提交中删除文件,但它仍然在以前的提交中。

如何从所有提交中删除文件? 我试过 但对我的不起作用。

我会软重置 3 个最新的提交。 然后删除 "little" 文件。 然后将所有更改放入 1 个新提交中。

我认为这不是很理想,但解决了问题,因为您还没有进行太多额外的提交。

您可以通过交互式变基更改最后 3 次提交。

git rebase -i HEAD~3

并将提交更改为 "edit"。

参见 https://help.github.com/articles/about-git-rebase/

关于观察:

I've tried about git filter-branch but don't work for my.

有关链接答案为何不起作用的更多详细信息将很有用。抛开这一点,我已经成功地多次使用下面的代码来实现相同的 objective:

git filter-branch --force --index-filter \
    "git rm --cached --ignore-unmatch <your-file>" \
    --prune-empty --tag-name-filter cat -- --all

此命令与 OP 链接的答案中讨论的内容大致相似。为清楚起见,值得补充的是,此命令在 从存储库中删除敏感数据 GitHub 帮助文章1.


1 文章似乎已经移动,所以我链接了 archive.is page