忽略提交给 git 的文件并将它们从历史记录中删除

Ste*_*eve 3 git version-control gitignore

当我开始我的项目时,我忘记将某些文件添加到我的 .gitignore 中,因此提交了我不应该添加的文件。之后我忽略了这些文件,如here所述。损坏已经发生,因为文件仍然存在于我的存储库的历史记录中,现在我的存储库大小为 10GB!

由于上述原因,我没有推送文件,因此重写历史记录应该没问题。简而言之,我需要做的是重写历史记录,以便之后当前文件中没有任何文件.gitignore存储库中的任何提交中存在。

编辑:有很多小文件导致大文件,所以关于如何删除超过特定大小阈值的所有文件的建议重复并不能解决这个问题。

Mar*_*Liu 7

要将提交历史重置为原始提交历史,您可以使用git reset --hard origin/branchname.

忽略文件并将其从历史记录中删除,您可以遵循以下两个方面:

1. 忽略已经提交给 git 的文件

  • 创建一个.gitignore文件(如果你没有)通过touch .gitignore.
  • 添加要忽略的文件和文件夹.gitignore。允许使用通配符。然后提交更改。
  • 忽略已提交历史记录中的文件:

git rm filename -r --cached git commit

2.从提交历史中完全删除文件

git filter-branch --index-filter 'git rm --ignore-unmatch -r --cached filename' --prune-empty -f -- --all
Run Code Online (Sandbox Code Playgroud)

整理你的本地库(你也可以跳过此步骤):

rm -Rf .git/refs/original
rm -Rf .git/logs/
git gc
git prune --expire now
Run Code Online (Sandbox Code Playgroud)

为了推动改写历史,以远程

git push -f --all
Run Code Online (Sandbox Code Playgroud)