Posted on?2018-06-19 22:30四葉草Grass?閱讀(2332) 評論(0)?編輯?收藏
git代碼庫回滾: 指的是將代碼庫某分支退回到以前的某個commit id
【本地代碼庫回滾】:
git reset --hard commit-id :回滾到commit-id惠奸,講commit-id之后提交的commit都去除
git reset --hard HEAD~3:將最近3次的提交回滾
【遠程代碼庫回滾】:
這個是重點要說的內(nèi)容哪轿,過程比本地回滾要復(fù)雜
應(yīng)用場景:自動部署系統(tǒng)發(fā)布后發(fā)現(xiàn)問題流酬,需要回滾到某一個commit榕莺,再重新發(fā)布
原理:先將本地分支退回到某個commit滥朱,刪除遠程分支扇单,再重新push本地分支
操作步驟:
1藐唠、git checkout the_branch
2翔试、git pull
3右钾、git branch the_branch_backup //備份一下這個分支當前的情況
4蚁吝、git reset --hard the_commit_id //把the_branch本地回滾到the_commit_id
5、git push origin :the_branch //刪除遠程 the_branch
6舀射、git push origin the_branch //用回滾后的本地分支重新建立遠程分支
7窘茁、git push origin :the_branch_backup //如果前面都成功了,刪除這個備份分支
如果使用了gerrit做遠程代碼中心庫和code review平臺脆烟,需要確保操作git的用戶具備分支的push權(quán)限山林,并且選擇了 Force Push選項(在push權(quán)限設(shè)置里有這個選項)
另外,gerrit中心庫是個bare庫邢羔,將HEAD默認指向了master驼抹,因此master分支是不能進行刪除操作的,最好不要選擇刪除master分支的策略拜鹤,換用其他分支框冀。如果一定要這樣做,可以考慮到gerrit服務(wù)器上修改HEAD指針敏簿。明也。。不建議這樣搞
1惯裕、新建backup分支 作為備份温数,以防萬一
git?branch?backup
2、將本地的backup分支 推送到遠程的backup
git?push?origin?backup:backup
3轻猖、本地倉庫徹底回退到xxxxx版本帆吻,xxxxx版本之后的commit信息將丟失
git?reset--hard?xxxxx
4域那、刪除遠程的master分支 (注意master前有個:)
git?push?origin:master
主要遠程倉庫的master如果是保護分支將報錯咙边,請去掉對分支的保護設(shè)置:
remote:GitLab:Youare??allowed??to??deletedprotectedbranchesfromthisproject.Tohttp://gitlab.mogujie.org/shihao/afanty.git?!?[remote?rejected]?master?(pre-receive?hook?declined)?error:?failed?to?push?some?refs?to?'http://gitlab.mogujie.org/xxxx/xxxx.git'
5猜煮、重新創(chuàng)建遠程master分支(這跟第1次提交本地代碼庫給遠程倉庫的命令一樣)
git?push?origin?master
1、本地代碼回滾到上一版本(或者指定版本)
git?reset--hard?HEAD~1
2败许、加入-f參數(shù)王带,強制提交,遠程端將強制跟新到reset版本
git?push-f?origin?master
注:方法二前建議如方法一一樣備份當前git中的數(shù)據(jù)市殷,個人推薦方法二
歡迎關(guān)注個人微信公眾號ycx645711愕撰,一起進步!掃描下方二維碼即可