1、git代碼庫回滾: 指的是將代碼庫某分支退回到以前的某個commit id
【本地代碼庫回滾】:
git reset --hard commit-id :回滾到commit-id乘陪,講commit-id之后提交的commit都去除
git reset --hard HEAD~3:將最近3次的提交回滾
【遠(yuǎn)程代碼庫回滾】:
這個是重點(diǎn)要說的內(nèi)容蚜退,過程比本地回滾要復(fù)雜
應(yīng)用場景:自動部署系統(tǒng)發(fā)布后發(fā)現(xiàn)問題,需要回滾到某一個commit,再重新發(fā)布
原理:先將本地分支退回到某個commit佑笋,刪除遠(yuǎn)程分支寄狼,再重新push本地分支
操作步驟:
1、git checkout the_branch
2柑营、git pull
3屈雄、git branch the_branch_backup //備份一下這個分支當(dāng)前的情況
4、git reset --hard the_commit_id //把the_branch本地回滾到the_commit_id
5官套、git push origin :the_branch //刪除遠(yuǎn)程 the_branch
6酒奶、git push origin the_branch //用回滾后的本地分支重新建立遠(yuǎn)程分支
7、git push origin :the_branch_backup //如果前面都成功了奶赔,刪除這個備份分支
如果使用了gerrit做遠(yuǎn)程代碼中心庫和code review平臺惋嚎,需要確保操作git的用戶具備分支的push權(quán)限,并且選擇了 Force Push選項(xiàng)(在push權(quán)限設(shè)置里有這個選項(xiàng))
另外站刑,gerrit中心庫是個bare庫另伍,將HEAD默認(rèn)指向了master,因此master分支是不能進(jìn)行刪除操作的绞旅,最好不要選擇刪除master分支的策略摆尝,換用其他分支。如果一定要這樣做因悲,可以考慮到gerrit服務(wù)器上修改HEAD指針堕汞。。晃琳。不建議這樣搞
參考資料:https://review.typo3.org/Documentation/access-control.html#category_push
2讯检、所有沒有 commit 的本地改動琐鲁,都會隨著 reset --hard 丟掉,無法恢復(fù)人灼。
如果只是想回到 pull 之前當(dāng)前分支所在的commit位置绣否,則可以。比方說你在 master 分支上挡毅,可以用 git reflog master 查看 master 分支歷史變動記錄蒜撮,其中應(yīng)該有一個就是你 pull 之前的那個commit, 你可以用 git reset --hard 來恢復(fù)跪呈。比如下面的段磨,假定你 pull 之前處在 xxxxxx 那個位置,那么可以用 git reset --hard master@{1} 恢復(fù)耗绿。 但是無論如何苹支,沒有commit并被 git reset --hard 清掉的本地改動是無法通過git恢復(fù)的。