使用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"都會改變。
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...
git如何回滾遠端倉庫
使用git管理專案開發的過程中經常會碰到這種情況 某次提交已經push到了遠端倉庫,可是突然意識到 天哪,我怎麼做了這麼蠢的事情 那麼問題來了,怎麼將遠端 庫回滾呢?在網上看到大部分人給出的解決方案是先將本地回滾,然後刪除遠端分支,之後再將本地的分支push到遠端倉庫,這其實是一種很危險的方案,畢竟...
git 如何回滾遠端倉庫版本
前言 使用git管理專案開發的過程中經常會碰到這種情況 某次提交已經push到了遠端倉庫,可是突然需要回退 怎麼將遠端 庫回滾呢?不推薦這樣做 在網上看到大部分人給出的解決方案是先將本地回滾,然後刪除遠端分支,之後再將本地的分支push到遠端倉庫,這其實是一種很危險的方案,畢竟直接刪除遠端分支太危險...