彻底清除git所有历史提交记录使其为“新”库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了彻底清除git所有历史提交记录使其为“新”库相关的知识,希望对你有一定的参考价值。

参考技术A

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

语法: git checkout --orphan <new_branch>
例句: git checkout --orphan latest_branch

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

新的分支名可以随意命名,但不能和以前的分支名冲突。这儿特别强调是因为很多人习惯默认将分支名创建为 master .
本文以 latest_branch 作为新分支名,这个名称没有任何特殊含义,你可自定义,只要保证和以后的使用一致即可。

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

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

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

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

如果别人pull不下来可以敲

可登录远程仓库再次确认。

这儿将上面的步骤封装为 bat 批处脚本(针对windows),双击即可运行。
文件名: fetch_push_clear_all_history.bat
将文本内容保存为 UTF-8 格式,文件最好放在 git 仓库外。如果放在 git 仓库内,需要将此文件在 .gitignore 中过滤。

抄袭此篇文章

Git之清除历史记录操作

近期公司需要将之前代码仓库中的提交记录都清理,所以操作一下,记录一下步骤:

安全考虑:

有时候在提交代码时,不小心提交了敏感数据,如账号密码什么的,这样在历史记录中就可以查看到,这样很不安全,所以就需要吧历史提交记录删了,变成一个新的仓库。

 

1.创建一个新的分支(孤儿分支)

git checkout --orphan latest_branch

 

2.添加所有文件

git add -A

 

3.提交更改

git commit -am "commit"

 

4.删除需要替换的分支

git branch -D master

 

5.重命名创建的分支为删除的分支

git branch -m master

 

6.强制提交到远程仓库

git push -f origin master

 

 

 

常见问题:

一般情况下,如果是清理master分支的话, gitlab默认中会是受保护的, 不允许强制提交

remote: GitLab: You are not allowed to force push code to a protected branch on this project.

解决:

开启允许强制推送即可

  

Git之清除历史记录操作_git

 



以上是关于彻底清除git所有历史提交记录使其为“新”库的主要内容,如果未能解决你的问题,请参考以下文章

彻底删除git中的较大文件(包括历史提交记录)

如何将历史记录彻底清除掉

怎么清除电脑里所有的历史记录

Git之清除历史记录操作

git 清空所有commit记录方法

01网页中清除历史浏览记录能不能彻底删除浏览记录?