场景
1、想删除本地所有log记录,记录里面有一些敏感信息。
2、返回某个记录的时候,需要用到强制推送
清除 git 所有历史提交记录方案
1.创建新分支
语法:git checkout --orphan <new_branch>
使用 --orphan 选项,可创建1个"清洁"分支(无任何的提交历史,但是当前分支的内容一应俱全。但严格意义上说,这样创建的分支还不是一个真正的分支,因为HEAD指向的引用中没有commit值,只有在进行一次提交后,它才算得上真正的分支。
注意:
新的分支名可以随意命名,但不能和以前的分支名冲突。这儿特别强调是因为很多人习惯默认将分支名创建为 master
.
本文以 latest_branch
作为新分支名,这个名称没有任何特殊含义,你可自定义,只要保证和以后的使用一致即可。
2.实现步骤
git checkout --orphan new_branch 创建临时分支
git add . //提交所有文件
git commit -m 'xxx' //提交说明
git branch -D master //删除原来的主分支
git branch -m master //重新命名
git push origin master --force //代码推送到远程仓库
推送报错
GitLab: You are not allowed to force push code to a protected branch on this project
1、如果用的是gitlab版本库,这说明gitlab对仓库启用了保护。
解决办法:
"Settings" -> "Repository" -> "scroll down to Protected branches".
2、原因是普通用户分配的权限是developer,这个权限的用户是没有权限推送代码的。
解决办法:
登录gitlab管理员账号 -> Project members -> set members