我不小心将一些大型测试 wav 文件提交到我的存储库中,它们占用了我的 Github 帐户上的大量空间。如何从历史记录中删除这些文件?
注意:这些文件是前一段时间提交的,不在 HEAD 提交中。
在不修改历史记录的情况下无法删除它们,因此如果有人拉动了更改,您可能必须处理这种混乱 - 请参阅从上游rebase 中恢复man git-rebase
。这可能非常糟糕,具体取决于您的工作流程 - 您可能必须以一种或另一种方式让每个人都意识到他们需要切换到“新”主分支,并将任何正在进行的工作重新定位在它之上。
如果提交仍在提示中,您可以重置为之前的提交:
git reset --hard HEAD^
或修改它:
git rm test.wav
git commit --amend
但由于它不再是小费,你最好的选择可能是使用交互式 rebase 来做到这一点:
git rebase -i <commit-before-mistake>
在要修复的提交上将“pick”更改为“edit”,然后就可以了!(如果可以的话,甚至删除整个提交)*
在完成您选择的任何一项后,您将不得不强制推动,因为它不再是快进:
git push -f origin
* 如果您随后提交了对这些文件的修改,您将在继续进行 rebase 时遇到问题。它们应该很容易处理,因为您只希望文件消失。当然,如果从那时起已经有一百次提交,那都会导致冲突,你可以看看git-filter-branch
. 手册页中的相关示例是:
git filter-branch --index-filter ’git rm --cached --ignore-unmatch filename’ HEAD
git commit --amend
如果它是您的 HEAD 提交;另一个是git rebase --interactive
。强制将更新的分支推送到 github。
git push --force github
(github
GitHub 的远程名称在哪里)。
这会将其从活动历史记录中删除。要真正回收空间,GitHub 需要进行垃圾收集。如果他们不自动执行此操作,我不确定是否可以明确执行此操作。您可能需要提交支持请求。