git 如何回滚远程仓库版本
前言:?使用git管理項(xiàng)目開發(fā)的過程中經(jīng)常會(huì)碰到這種情況:某次提交已經(jīng)push到了遠(yuǎn)程倉庫,可是突然需要回退代碼,怎么將遠(yuǎn)程代碼庫回滾呢?
不推薦這樣做:在網(wǎng)上看到大部分人給出的解決方案是先將本地回滾,然后刪除遠(yuǎn)程分支,之后再將本地的分支push到遠(yuǎn)程倉庫,這其實(shí)是一種很危險(xiǎn)的方案,畢竟直接刪除遠(yuǎn)程分支太危險(xiǎn)。
關(guān)于遠(yuǎn)程倉庫回滾
首先,必須要明白的一件事,任何普通用戶不能擅自做有關(guān)遠(yuǎn)程倉庫回退的操作,如果你擅自回滾了遠(yuǎn)程倉庫,會(huì)對(duì)項(xiàng)目團(tuán)隊(duì)其他人造成不可預(yù)知的影響。如果需要回退版本,先聯(lián)系項(xiàng)目的倉庫管理員,在團(tuán)隊(duì)其他人都對(duì)自己本地未提交的工作做好備份之后,再進(jìn)行遠(yuǎn)程倉庫回退操作,操作結(jié)束后,團(tuán)隊(duì)成員需要重新同步遠(yuǎn)程倉庫后繼續(xù)自己的工作。
通常回滾遠(yuǎn)程倉庫會(huì)有以下三種情形:
1、刪除最后一次提交
這種情況是最簡(jiǎn)單的了,只需要以下兩步就可以了
git revert HEADgit push origin master注意,revert和reset的區(qū)別:
revert是放棄指定提交的修改,但是會(huì)生成一次新的提交,需要填寫提交注釋,以前的歷史記錄都在,而reset是指將HEAD指針指到指定提交,歷史記錄中不會(huì)出現(xiàn)放棄的提交記錄。如果還沒有理解的話,我們做如下測(cè)試:
假設(shè)我們有以下三次提交記錄:
現(xiàn)在我們使用revert放棄最后一次提交,之后執(zhí)行g(shù)it log:
git revert HEADgit log
歷史記錄中還有第三次提交的記錄,并且多了一次的提交,但是倉庫內(nèi)容已經(jīng)回到了第二次提交之后的狀態(tài)。 現(xiàn)在我們使用reset回到第三次提交,之后執(zhí)行g(shù)it log:
git reset --hard HEAD^git log
歷史記錄中已經(jīng)沒有之前revert生成的提交記錄了,現(xiàn)在應(yīng)該明白了吧。 如果刪除遠(yuǎn)程倉庫的最后一次提交的時(shí)候不需要保留歷史記錄的話,可以使用reset,命令如下:
git reset --hard HEAD^git push origin master -f-f?參數(shù)是強(qiáng)制提交,因?yàn)閞eset之后本地庫落后于遠(yuǎn)程庫一個(gè)版本,因此需要強(qiáng)制提交。
2、刪除歷史某次提交
這種情況需要先用git log命令在歷史記錄中查找到想要?jiǎng)h除的某次提交的commit id,比如下圖中圈出來的就是注釋為"2"的提交的commit id(由此可見提交的注釋很重要,一定要認(rèn)真寫)
然后執(zhí)行以下命令("commit id"替換為想要?jiǎng)h除的提交的"commit id",需要注意最后的^號(hào),意思是commit id的前一次提交):
git rebase -i "commit id"^執(zhí)行該條命令之后會(huì)打開一個(gè)編輯框,內(nèi)容如下,列出了包含該次提交在內(nèi)之后的所有提交。
然后在編輯框中刪除你想要?jiǎng)h除的提交所在行,然后保存退出就好啦,如果有沖突的需要解決沖突。接下來,執(zhí)行以下命令,將本地倉庫提交到遠(yuǎn)程庫就完成了:
git push origin master -f3、修改歷史某次提交
這種情況的解決方法類似于第二種情況,只需要在第二條打開編輯框之后,將你想要修改的提交所在行的pick替換成edit然后保存退出,這個(gè)時(shí)候rebase會(huì)停在你要修改的提交,然后做你需要的修改,修改完畢之后,執(zhí)行以下命令:
git add .git commit --amendgit rebase --continue如果你在之前的編輯框修改了n行,也就是說要對(duì)n次提交做修改,則需要重復(fù)執(zhí)行以上步驟n次。
需要注意的是,在執(zhí)行rebase命令對(duì)指定提交修改或刪除之后,該次提交之后的所有提交的"commit id"都會(huì)改變。
from:?http://zl378837964.iteye.com/blog/2315206
總結(jié)
以上是生活随笔為你收集整理的git 如何回滚远程仓库版本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详细聊聊Javadoc注释规范
- 下一篇: Git远程库版本回滚