8

我不小心将一些大型测试 wav 文件提交到我的存储库中,它们占用了我的 Github 帐户上的大量空间。如何从历史记录中删除这些文件?

注意:这些文件是前一段时间提交的,不在 HEAD 提交中。

4

2 回答 2

11

在不修改历史记录的情况下无法删除它们,因此如果有人拉动了更改,您可能必须处理这种混乱 - 请参阅从上游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

于 2009-10-20T19:17:13.587 回答
2
  1. 从您提交它的分支的本地历史记录中删除它。一种方法是使用git commit --amend如果它是您的 HEAD 提交;另一个是git rebase --interactive
  2. 强制将更新的分支推送到 github。

    git push --force github
    

    githubGitHub 的远程名称在哪里)。

这会将其从活动历史记录中删除。要真正回收空间,GitHub 需要进行垃圾收集。如果他们不自动执行此操作,我不确定是否可以明确执行此操作。您可能需要提交支持请求。

于 2009-10-20T19:15:32.957 回答