【问题标题】:How to remove a folder and all its history如何删除文件夹及其所有历史记录
【发布时间】:2015-09-12 09:02:38
【问题描述】:

我添加了一个包含图像的文件夹 - 错误地 - 但我现在才意识到这一点。是否有可能从那天起删除此文件夹而不以任何方式影响其余文件?

【问题讨论】:

  • 添加的意思是:暂存(git add)、已提交(git commit)还是推送到远程存储库?
  • 是的,完全正确。我已将它们推送到存储库中。
  • 还有其他人使用该存储库吗?在同一次提交中是否添加或更改了其他任何内容?

标签: git


【解决方案1】:

从那天起删除此文件夹,而不以任何方式影响其余文件?

过滤器分支(在leemoanswer 中提到)不会“影响”文件,但会影响回购的历史记录。

您必须发送git push --force 才能发布该更正,这意味着警告其他合作者将他们自己的 repo 重置为新的 origin/master 分支。

在你做之前,尺寸不会变小

git gc
git repack -Ad      # kills in-pack garbage
git prune           # kills loose garbage

除非您可以访问该服务器并在裸仓库上执行相同的命令,否则它在远程端不会变小:请参阅“Clean up large files on git server”。

【讨论】:

  • 哦,我不知道!谢谢你,我会更新我的答案! +1
【解决方案2】:

我不知道你的文件夹叫什么,但这就是你要找的(它假设文件夹被称为img 并且只更新本地历史记录)

git filter-branch --tree-filter 'rm -rf img' --prune-empty HEAD
echo img/ >> .gitignore
git add .gitignore
git commit -m 'Removing images folder from git history'
git gc

注意: git gc 从历史记录中清理文件,以便您可以释放它们使用的空间

【讨论】:

  • 据我了解,OP也想抹去历史。
  • @bereal 这就是filter-branch 的用武之地。
  • 这会过滤分支历史并删除与img 匹配的所有内容。或者你的意思是彻底抹去历史?我想不出你想要这样做的理由
  • 是的,我指的是文件夹。你是对的,我没有先得到它。
猜你喜欢
  • 2012-04-21
  • 2015-12-22
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
相关资源
最近更新 更多