我不小心将一些大型测试wav文件提交到我的存储库中,他们在我的Github帐户上占用了大量空间。如何从历史记录中删除这些文件?
注意:这些文件是在前一段时间提交的,并不在HEAD提交中。
答案 0 :(得分:11)
如果没有修改历史记录就无法移除它们,所以如果有人撤消了更改,您可能需要处理这些混乱 - 请参阅man git-rebase
中的recovering from upstream rebase。这可能非常糟糕,取决于您的工作流程 - 您可能需要以某种方式让每个人都知道他们需要切换到“新”主分支,重新定位正在进行的任何工作。
如果提交仍在提示中,您可以在它之前重置为提交:
git reset --hard HEAD^
或修改它:
git rm test.wav
git commit --amend
但是因为它不再是小费,你最好的选择可能是通过交互式基础来做到这一点:
git rebase -i <commit-before-mistake>
在您要修复的提交上将“选择”更改为“编辑”,然后进行操作! (如果可以的话,甚至删除整个提交)*
在你选择了这些中的任何一个之后,你必须强行推动,因为它不再是快进:
git push -f origin
<子>
*如果您随后对这些文件进行了修改,那么在您继续使用rebase时会遇到问题。他们应该直截了当地处理,因为你只是希望文件消失。当然,如果从那时起已经有一百次提交,那么所有这些都会引起冲突,你可以看看git-filter-branch
。 man page的相关示例是:
git filter-branch --index-filter ’git rm --cached --ignore-unmatch filename’ HEAD
答案 1 :(得分:2)
git commit --amend
,如果它是你的HEAD提交;另一个是git rebase --interactive
。强制将更新的分支推送到github。
git push --force github
(其中github
是GitHub的遥控器名称。)
这会将其从活动历史记录中删除。要实际回收空间,GitHub将需要进行垃圾收集。如果他们不自动执行此操作,我不确定如何明确地执行此操作。您可能需要提交支持请求。