日常開發(fā)中經(jīng)常碰到需要清空一個(gè)分支中的提交記錄重新進(jìn)行提交喘帚, 之前使用gitlab因?yàn)楸Wo(hù)分支的原因重來(lái)沒(méi)有成功過(guò)诡壁,笨辦法就是刪了項(xiàng)目重建障贸,進(jìn)行了一大圈的搜索喝了一瓢盜泉之水扒來(lái)如下實(shí)踐記錄炼吴。
假設(shè)當(dāng)前有一個(gè)git倉(cāng)庫(kù)味滞, 需要?jiǎng)h除master分支的所有commit記錄粱锐, 執(zhí)行如下操作疙挺。
新建空白分支
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
推送到遠(yuǎn)程倉(cāng)庫(kù),f參數(shù)意思為force怜浅,會(huì)覆蓋遠(yuǎn)程倉(cāng)庫(kù)的master分支
git push -f origin master
主要問(wèn)題出現(xiàn)在這里铐然, 推送后會(huì)報(bào)錯(cuò), 因?yàn)閙aster分支默認(rèn)為保護(hù)分支所以需要進(jìn)入gitlab取消保護(hù)分支
? 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取消保護(hù)分支
找到對(duì)應(yīng)的倉(cāng)庫(kù)--> setting --> Protected Branches --> unprotect
取消后push就可以正常push了恶座, 不過(guò)不能忘記將master分支重新設(shè)置為保護(hù)分支
查看分支狀態(tài)
git branch
git log
將現(xiàn)有dev分支更改為master分支搀暑。
登錄gitlab取消保護(hù)分支
找到對(duì)應(yīng)的倉(cāng)庫(kù)--> setting --> Protected Branches --> unprotect
取消后push就可以正常push了, 不過(guò)不能忘記將master分支重新設(shè)置為保護(hù)分支
git checkout dev
刪除原來(lái)的master分支
git branch -D master
將dev分支更名為master
git branch -m master
git push -f origin master
創(chuàng)建原來(lái)的dev分支
git checkout -b dev
將修改push到git倉(cāng)庫(kù)中
git push --set-upstream origin dev
在gitlab中將master重新設(shè)置為保護(hù)分支