如何永久删除存储在GIT中的文件?

mrb*_*lah 48 git

我将我的数据库备份到GIT,这样我就可以在家用计算机上获取数据库了.

我不希望这个文件被版本化,它只是一次性的事情.

我可以将其删除,因此GIT无法跟踪它的进展或历史吗?

Ala*_*avi 92

我总是找到指南:完全删除所有修订文件中的文件有用.

要删除名为的文件Rakefile:

git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch Rakefile' \
  --prune-empty --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)

此命令将运行每个分支和标记的整个历史记录,更改涉及该文件的Rakefile任何提交以及之后的任何提交.之后呈现空的提交(因为它们仅更改了Rakefile)将被完全删除.

  • 谢谢,这确实有效!您还可以添加:git push --all --force (4认同)
  • 谢谢.我花了几次尝试,因为我没有提供文件的完整相对路径(从根目录),只是有文件名. (3认同)
  • 当你要在远程存储库(`git push --all --force`)上进行历史重写时,请记住始终警告所有同行,否则他们在执行拉动时将面临各种问题. (2认同)

And*_*wik 28

远程存储库更新:

git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch FOLDERNAME" -- --all
Run Code Online (Sandbox Code Playgroud)

将FOLDERNAME替换为您要从给定git存储库中删除的文件或文件夹.

rm -rf .git/refs/original/

git reflog expire --expire=now --all

git gc --prune=now

git gc --aggressive --prune=now
Run Code Online (Sandbox Code Playgroud)

现在将所有更改推送到远程存储库

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

这将清理远程存储库.

  • 这个答案非常有帮助,对我来说就像一种魅力。我需要删除几个月前意外提交的大文件夹,使我们的 repo 膨胀了数百兆。该过程大约需要一个小时才能完成。我确实遇到了“git push --all --force”的问题。由于这些更改已提交到我们的开发分支,因此我首先必须执行“git checkout develop”,然后执行“git push”以使更改同步到远程仓库。 (2认同)

dez*_*zhi 6

您也可以轻松使用 bfg。

BFG 是 git-filter-branch 的更简单、更快的替代方案,用于清除 Git 存储库历史记录中的不良数据:

删除疯狂的大文件 删除密码、凭据和其他私人数据

$ bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA
Run Code Online (Sandbox Code Playgroud)

或者只是替换某个文件的所有出现:

$ bfg --replace-text passwords.txt
Run Code Online (Sandbox Code Playgroud)

检查https://rtyley.github.io/bfg-repo-cleaner/https://help.github.com/articles/removing-sensitive-data-from-a-repository/