【问题标题】:Git: How to delete committed file permanently?Git:如何永久删除提交的文件?
【发布时间】:2013-05-09 15:43:16
【问题描述】:

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

如何永久删除已提交的文件,使其不留痕迹?

【问题讨论】:

标签: git git-rewrite-history


【解决方案1】:

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

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

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

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

【讨论】:

  • 还缺少git gc - 直到悬空提交被垃圾收集它们仍然存在。
【解决方案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)将被完全删除。请注意,您需要指定要删除的文件的完整路径,而不仅仅是文件名。

【讨论】:

  • 您缺少git gc - 并且没有提到这不会影响远程仓库(如果有的话)。
  • @AD7six 按照我帖子中的给定链接,然后是git gc 命令。贴出的代码只是一个简短的介绍,强烈建议阅读全文。
  • 您的答案不完整。强烈建议编写答案,以便参考支持 - 而不是基本 - 信息。不过,我对参考资料非常熟悉 :)。
猜你喜欢
  • 1970-01-01
  • 2019-11-14
  • 2013-08-03
  • 2023-03-08
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
相关资源
最近更新 更多