如何从 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
这将使服务器上的旧历史无法访问,因此请谨慎使用。
我最近开始了一个新项目,一开始我做了很多实验。现在有一些新人加入,我想从 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
这将使服务器上的旧历史无法访问,因此请谨慎使用。