如何清除远程 GitHub 存储库中的所有提交记录

5
我不小心从本地存储库推送了数百次提交到新创建的 GitHub 存储库。 如何在远程存储库中清除/删除所有这些提交,以便 GitHub 存储库像起始时一样干净?我还想失去那些操作的历史记录。 我希望在不影响本地存储库的情况下完成此操作。 由于它是 GitHub 主分支,因此我无法删除该分支。

3
如果你想完全重置历史记录,为什么不直接删除存储库并重新创建呢? - Matthew Scharley
如果这是一个新的代码库,你可以直接删除它并使用正确的提交再次推送。 - Clueless
1
好的,是的。删除它并重新创建它就是我最终采取的方法。我只是想知道是否有更聪明的 Git 方法来清理它。 - Martin
3
@martin 有时候,简单比聪明更好 :) - Andy
2个回答

11

你可以:

- git clone <your github repo>
- git reset --hard <an_older_commit> (where you didn't have those huge files)
- git push --force origin master

这样做:

  • 你的初始本地仓库不会受到影响(你可以修复它,以便不再推送那些文件)
  • 你的远程(GitHub)仓库不再看到那些包含大文件的提交记录。
  • GitHub会定期在其端运行git gc,完全清理未引用的文件。

然而OP Martin提到:

如何将代码库恢复到第一个提交之前的状态,即我想要获取空的代码库,而不是回滚到先前的提交?

在这种情况下,创建一个新的本地代码库,进行第一次小的提交,然后push --force该提交。
更普遍地说,当创建一个代码库时,我总是尝试在主分支上进行第一个的初始提交,以便能够回到最小的提交,或者从该最小的提交开始一个新的分支(用于无关的开发工作)。


我该如何将代码库重置到第一次提交之前的状态? - Martin
我想要获取空的代码库,而不是回滚到以前的提交。 - Martin
+1 是为了 小型初始提交。我以前总是使用 git add . && git commit,但这个变体更好! - eckes

2
git push -f REMOTE COMMIT:BRANCH

例如,要强制远程origin的分支master撤销至提交ID为123456的提交,您应该执行以下操作。
git push -f origin 123456:master

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接