Git:如何永久删除已提交的文件?

时间:2013-05-15 07:04:28

标签: git git-rewrite-history

我提交的文件不应该在git存储库中。 我删除了它并提交删除,但我仍然可以通过git历史记录访​​问该文件。

如何永久删除已提交的文件,以便没有它的痕迹?

2 个答案:

答案 0 :(得分:7)

您可以使用filter-branch永久删除文件。它将在存储库的每个修订版中的参数中应用命令。

git filter-branch --tree-filter 'rm -rf your_file' HEAD

This detailed post可能会对您有所帮助。 git doc也非常有用。

如评论中所述,您还需要git gc来清理本地提交,然后git push来更新您的远程存储库。

答案 1 :(得分:2)

这可能会有所帮助:

https://help.github.com/articles/remove-sensitive-data

以下命令将执行此操作:

git clone https://github.com/defunkt/github-gem.git
# Initialized empty Git repository in /Users/tekkub/tmp/github-gem/.git/
# remote: Counting objects: 1301, done.
# remote: Compressing objects: 100% (769/769), done.
# remote: Total 1301 (delta 724), reused 910 (delta 522)
# Receiving objects: 100% (1301/1301), 164.39 KiB, done.
# Resolving deltas: 100% (724/724), done.

cd github-gem

git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch Rakefile' \
  --prune-empty --tag-name-filter cat -- --all
# Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (266/266)
# Ref 'refs/heads/master' was rewritten
  

此命令将运行每个分支和标记的整个历史记录,更改涉及文件Rakefile的任何提交,以及之后的任何提交。之后呈现空的提交(因为它们仅更改了Rakefile)将被完全删除。请注意,您需要指定要删除的文件的完整路径,而不仅仅是文件名。