git 如何回滾遠端倉庫版本

2021-07-26 19:47:11 字數 1890 閱讀 6037

前言: 使用git管理專案開發的過程中經常會碰到這種情況:某次提交已經push到了遠端倉庫,可是突然需要回退**,怎麼將遠端**庫回滾呢?

不推薦這樣做:在網上看到大部分人給出的解決方案是先將本地回滾,然後刪除遠端分支,之後再將本地的分支push到遠端倉庫,這其實是一種很危險的方案,畢竟直接刪除遠端分支太危險。

首先,必須要明白的一件事,任何普通使用者不能擅自做有關遠端倉庫回退的操作,如果你擅自回滾了遠端倉庫,會對專案團隊其他人造成不可預知的影響。如果需要回退版本,先聯絡專案的倉庫管理員,在團隊其他人都對自己本地未提交的工作做好備份之後,再進行遠端倉庫回退操作,操作結束後,團隊成員需要重新同步遠端倉庫後繼續自己的工作。

通常回滾遠端倉庫會有以下三種情形:

這種情況是最簡單的了,只需要以下兩步就可以了

git revert head

git push origin master

注意,revert和reset的區別:

revert是放棄指定提交的修改,但是會生成一次新的提交,需要填寫提交注釋,以前的歷史記錄都在,而reset是指將head指標指到指定提交,歷史記錄中不會出現放棄的提交記錄。如果還沒有理解的話,我們做如下測試:

假設我們有以下三次提交記錄:

現在我們使用revert放棄最後一次提交,之後執行git log:

git revert head

git log

歷史記錄中還有第三次提交的記錄,並且多了一次的提交,但是倉庫內容已經回到了第二次提交之後的狀態。 現在我們使用reset回到第三次提交,之後執行git log:

git reset --hard head^

git log

歷史記錄中已經沒有之前revert生成的提交記錄了,現在應該明白了吧。 如果刪除遠端倉庫的最後一次提交的時候不需要保留歷史記錄的話,可以使用reset,命令如下:

git reset --hard head^

git push origin master -f

-f 引數是強制提交,因為reset之後本地庫落後於遠端庫乙個版本,因此需要強制提交。

這種情況需要先用git log命令在歷史記錄中查詢到想要刪除的某次提交的commit id,比如下圖中圈出來的就是注釋為"2"的提交的commit id(由此可見提交的注釋很重要,一定要認真寫)

然後執行以下命令("commit id"替換為想要刪除的提交的"commit id",需要注意最後的^號,意思是commit id的前一次提交):

git rebase -i "commit id"^
執行該條命令之後會開啟乙個編輯框,內容如下,列出了包含該次提交在內之後的所有提交。

然後在編輯框中刪除你想要刪除的提交所在行,然後儲存退出就好啦,如果有衝突的需要解決衝突。接下來,執行以下命令,將本地倉庫提交到遠端庫就完成了:

git push origin master -f
這種情況的解決方法類似於第二種情況,只需要在第二條開啟編輯框之後,將你想要修改的提交所在行的pick替換成edit然後儲存退出,這個時候rebase會停在你要修改的提交,然後做你需要的修改,修改完畢之後,執行以下命令:

git add .

git commit --amend

git rebase --continue

如果你在之前的編輯框修改了n行,也就是說要對n次提交做修改,則需要重複執行以上步驟n次。

需要注意的是,在執行rebase命令對指定提交修改或刪除之後,該次提交之後的所有提交的"commit id"都會改變。

from: 

git如何回滾遠端倉庫

使用git管理專案開發的過程中經常會碰到這種情況 某次提交已經push到了遠端倉庫,可是突然意識到 天哪,我怎麼做了這麼蠢的事情 那麼問題來了,怎麼將遠端 庫回滾呢?在網上看到大部分人給出的解決方案是先將本地回滾,然後刪除遠端分支,之後再將本地的分支push到遠端倉庫,這其實是一種很危險的方案,畢竟...

git遠端倉庫回滾

使用git管理專案開發的過程中經常會碰到這種情況 某次提交已經push到了遠端倉庫,可是突然意識到 天哪,我怎麼做了這麼蠢的事情 那麼問題來了,怎麼將遠端 庫回滾呢?在網上看到大部分人給出的解決方案是先將本地回滾,然後刪除遠端分支,之後再將本地的分支push到遠端倉庫,這其實是一種很危險的方案,畢竟...

git 遠端倉庫回滾

git branch backup 建立備份分支 git push origin backup backup push到遠端 git reset hard commit id 本地分支回滾 git push origin the branch 刪除遠端分支 git push origin the b...