日常开发中经常碰到需要清空一个分支中的提交记录重新进行提交, 之前使用gitlab因为保护分支的原因重来没有成功过,笨办法就是删了项目重建,进行了一大圈的搜索喝了一瓢盗泉之水扒来如下实践记录。
假设当前有一个git仓库, 需要删除master分支的所有commit记录, 执行如下操作。
新建空白分支
git checkout --orphan null_branch
git add -A
git commit -am "Init commit."
删除旧的master分支
git branch -D master
修改null_branch
为master分支
git branch -m master
推送到远程仓库,f参数意思为force,会覆盖远程仓库的master分支
git push -f origin master
主要问题出现在这里, 推送后会报错, 因为master分支默认为保护分支所以需要进入gitlab取消保护分支
➜ git push -f origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Writing objects: 100% (4/4), 279 bytes | 279.00 KiB/s, done.
Total 4 (delta 0), reused 1 (delta 0)
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To git.example.com:devops/example.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@git.example.com:devops/example.git'
登录gitlab取消保护分支
找到对应的仓库--> setting --> Protected Branches --> unprotect
取消后push就可以正常push了, 不过不能忘记将master分支重新设置为保护分支
查看分支状态
git branch
git log
将现有dev分支更改为master分支。
登录gitlab取消保护分支
找到对应的仓库--> setting --> Protected Branches --> unprotect
取消后push就可以正常push了, 不过不能忘记将master分支重新设置为保护分支
git checkout dev
删除原来的master分支
git branch -D master
将dev分支更名为master
git branch -m master
git push -f origin master
创建原来的dev分支
git checkout -b dev
将修改push到git仓库中
git push --set-upstream origin dev
在gitlab中将master重新设置为保护分支
网友评论