如何从 git 历史记录中清除所有以前的提交?

How can I clear all previous commits from git history?

我最近开始了一个新项目,一开始我做了很多实验。现在有一些新人加入,我想从 git 历史中删除第一次提交,因为它们似乎没有意义,每个浏览 repo 的人都会感到困惑。

一个可能的解决方案是从头开始设置一个新的存储库,但我更愿意重写历史。

我需要的只是将 master 上的 HEAD 提交设置为 repo 中的第一个也是唯一一个提交。

压缩本地存储库中所有不需要的提交,然后使用 --force 选项将它们推送到远程存储库。

如果你真的确定你在做什么,你可以对你的第一次提交进行交互式变基:

git rebase --interactive --root

并修复每一次提交。 但至少我会建议在之前检查另一个分支:

git checkout -b rebase

如果您想使用 git rebase,您可能会对 Git - squash entire branch - one line squash command 感兴趣。

如果您有大量提交的历史记录,git rebease 可能需要很长时间。在这种情况下,你可以做一个浅克隆

git clone --depth 1 <REPO_URL>

git commit --amend

为了创建包含最新更改的独立提交 而不是强制推动

git push -f

您可以使用

在没有任何父提交的情况下创建一个新的根分支
git checkout --orphan new-master

并使用

将存储库状态提交到该新分支
git add .
git commit

并使用

将其推送到服务器
git push --force origin new-master:master

这将使服务器上的旧历史无法访问,因此请谨慎使用。