本內容轉摘自折騰的博客
git代碼庫回滾: 指的是將代碼庫某分支退回到以前的某個commit id
【本地代碼庫回滾】:
git reset --hard commit-id
:回滾到commit-id口芍,講commit-id之后提交的commit都去除
git reset --hard HEAD~3
:將最近3次的提交回滾
【遠程代碼庫回滾】:
這個是重點要說的內容,過程比本地回滾要復雜
應用場景:自動部署系統(tǒng)發(fā)布后發(fā)現問題级及,需要回滾到某一個commit喊括,再重新發(fā)布
原理:先將本地分支退回到某個commit贮缕,刪除遠程分支腮猖,再重新push本地分支
操作步驟:
git checkout the_branch
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 psbyhainuo:這一步是推送刪除遠端當前分支税稼,origin
和:
中間有一個空格 -
git push origin the_branch
//用回滾后的本地分支重新建立遠程分支 -
git push origin :the_branch_backup
//如果前面都成功了胆胰,刪除這個備份分支psbyhainuo:這一步也是推送刪除遠端分支
psbyhainuo:本代碼遠端的回滾操作經過實測確實可用狞贱。
但是你首先要將遠端分支去處默認分支設置,然后去除相關的webhooks蜀涨,然后按照上述代碼操作;
操作成功后啟用webhooks瞎嬉,然后打開自動部署的服務器終端,適用git pull 執(zhí)行一下勉盅,檢查是否正常拉取根據提示修復一下即可佑颇。
如果使用了gerrit做遠程代碼中心庫和code review平臺,需要確保操作git的用戶具備分支的push權限草娜,并且選擇了 Force Push選項(在push權限設置里有這個選項)
另外,gerrit中心庫是個bare庫痒筒,將HEAD默認指向了master宰闰,因此master分支是不能進行刪除操作的,最好不要選擇刪除master分支的策略簿透,換用其他分支移袍。如果一定要這樣做,可以考慮到gerrit服務器上修改HEAD指針老充。葡盗。。不建議這樣搞