Fentaniao
文章19
标签13
分类8
如何清除Git所有历史提交记录

如何清除Git所有历史提交记录

如何彻底清除Git所有历史提交记录使其为“新”库。

背景

  • 以前开发中未制定、遵循 git 管理项目标准,随意(不规范)的提交 严重“污染了”提交历史,使开发主线 “脏乱”;
  • 基于以前的仓库重新开发,这样可保留以前的配置等文件,但是需要删除全部的历史记录、tag、分支等;
  • 由于自己或其他方面特殊需求,需要保留仓库的部分属性(创建时间,说明,主页等),但需要清除历史记录,使其为“新库”。
  • 基于以上3方面的需求,需要提供一个 在不删除原仓库的前提下,清除原仓库的所有历史提交记录(包含:分支、tag) 解决方案。

清除 git 所有历史提交记录方案

1.创建新分支

1
git checkout --orphan <new_branch>

使用 --orphan 选项,可创建1个”清洁”分支(无任何的提交历史,但是当前分支的内容一应俱全。但严格意义上说,这样创建的分支还不是一个真正的分支,因为HEAD指向的引用中没有commit值,只有在进行一次提交后,它才算得上真正的分支。

注意

新的分支名可以随意命名,但不能和以前的分支名冲突。这儿特别强调是因为很多人习惯默认将分支名创建为 main。

2.添加文件

手动添加一个文件,如README.md

3.commit代码

1
git commit -m "自定义提交说明"

4.删除原来的主分支(master)

1
git branch -D main

一般仓库默认的主分支为 main分支,如果原来的主分支不是 main, 用实际的主分支名代替。

5.把当前分支重命名为main

1
git branch -m main

6.最后把代码推送到远程仓库

注意

有些仓库有 main分支保护,不允许强制 push,需要在远程仓库项目里暂时把项目保护关掉才能推送。

1
git push -f origin main

注意

推送前 需要使用git remote -v查看关联的远程仓库的信息(主要是远程库的别名)。虽然远程库的别名默认是 origin ,但你可能设置过其他的别名(而非 origin)。

推送前,有的情况需要设置:git branch --set-upstream-to=origin/main main

参考资料

彻底清除git所有历史提交记录使其为“新”库:https://blog.csdn.net/jhsword/article/details/107543884

本文作者:Fentaniao
本文链接:https://fentaniao.github.io/2022/02/28/Clear-Git-Commit/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×