git代碼庫回滾: 指的是將代碼庫某分支退回到之前的某個commit idgit
【本地代碼庫回滾】:服務器
git reset --hard commit-id :回滾到commit-id,講commit-id以後提交的commit都去除gitlab
git reset --hard HEAD~3:將最近3次的提交回滾this
【遠程代碼庫回滾】:spa
這個是重點要說的內容,過程比本地回滾要複雜指針
應用場景:自動部署系統發佈後發現問題,須要回滾到某一個commit,再從新發布code
原理:先將本地分支退回到某個commit,刪除遠程分支,再從新push本地分支rem
操做步驟:部署
一、git checkout the_branchget
二、git pull
三、git branch the_branch_backup //備份一下這個分支當前的狀況
四、git reset --hard the_commit_id //把the_branch本地回滾到the_commit_id
五、git push origin :the_branch //刪除遠程 the_branch
六、git push origin the_branch //用回滾後的本地分支從新創建遠程分支
七、git push origin :the_branch_backup //若是前面都成功了,刪除這個備份分支
若是使用了gerrit作遠程代碼中心庫和code review平臺,須要確保操做git的用戶具有分支的push權限,而且選擇了 Force Push選項(在push權限設置裏有這個選項)
另外,gerrit中心庫是個bare庫,將HEAD默認指向了master,所以master分支是不能進行刪除操做的,最好不要選擇刪除master分支的策略,換用其餘分支。若是必定要這樣作,能夠考慮到gerrit服務器上修改HEAD指針。。。不建議這樣搞
一、新建backup分支 做爲備份,以防萬一
二、將本地的backup分支 推送到遠程的backup
三、本地倉庫完全回退到xxxxx版本,xxxxx版本以後的commit信息將丟失
四、刪除遠程的master分支 (注意master前有個:)
主要遠程倉庫的master若是是保護分支將報錯,請去掉對分支的保護設置:
五、從新建立遠程master分支(這跟第1次提交本地代碼庫給遠程倉庫的命令同樣)
一、本地代碼回滾到上一版本(或者指定版本)
二、加入-f參數,強制提交,遠程端將強制跟新到reset版本
注:方法二前建議如方法一同樣備份當前git中的數據,我的推薦方法二