1. 程式人生 > >【Git】git如何回滾遠端倉庫

【Git】git如何回滾遠端倉庫

使用git管理專案開發的過程中經常會碰到這種情況:某次提交已經push到了遠端倉庫,可是突然意識到“天哪,我怎麼做了這麼蠢的事情”。那麼問題來了,怎麼將遠端程式碼庫回滾呢?

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

關於遠端倉庫回滾

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

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

1、刪除最後一次提交

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

    git revert HEAD
    git push origin master

注意,revert和reset的區別:

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

log

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

    git revert HEAD
    git log

revert

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

    git reset --hard HEAD^
    git log

reset

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

    git reset --hard HEAD^
    git push origin master -f

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

2、刪除歷史某次提交

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

commit

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

    git rebase -i "commit id"^

執行該條命令之後會開啟一個編輯框,內容如下,列出了包含該次提交在內之後的所有提交。

rebase

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

    git push origin master -f

3、修改歷史某次提交

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

    git add .
    git commit --amend
    git rebase --continue

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

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

歡迎關注公眾號:

相關推薦

Gitgit如何遠端倉庫

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

git 遠端倉庫(revert、reset、rebase)

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

git如何遠端倉庫

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

GitlabGITmaster分支到指定tag版本 並提交遠程倉庫

git master 回滾【Gitlab】GIT回滾master分支到指定tag版本 並提交遠程倉庫1 查看分支git branch 2 切換到master分支git checkout master 3 查看標簽git tagv1.3.3v1.3.4v1.3.5 4 查看某個標簽的詳情git show v1.

Git之窗(十)“遠端倉庫”版本退解決方案

由於TGB的圖書管理系統託管在本地伺服器上的GitLab中,最近因為大家使用Git過程出了一些問題,導致需要回退伺服器上的遠端版本,回退過程中又出了一些問題,比如push不上去,比如別人電腦的版本比遠端版本高几個commit版本等,在網上找了好多資料,這位博主的文章簡直涵蓋了我的問題,又有對

2、Linux GitGit的安裝、本地倉庫遠端倉庫的使用

一、安裝git     在Linux作業系統中安裝git,直接使用下面的命令就可以: sudo apt-get install git     安裝完成後,還需要最後一步設定,在命令列輸入: git config --global user.name "Your Name"

Git 基於SSH協議clone GitHub遠端倉庫到本地

經常逛 GitHub 的可能都知道,在 clone 遠端倉庫的時候,會有兩個選項,如下圖: 首先我們來說明一下兩種方式的區別。 使用 HTTPS url 克隆對初學者來說會比較方便,複製HTTPS

Gitgit將原生代碼提交到遠端倉庫

將原生代碼上傳到遠端倉庫的時候,開啟命令列視窗,進入到原生代碼的資料夾。 $ touch README.md $ git init $ git add README.md 但這一步是新增README.md檔案,初始化git,這樣在本地資料夾下會生成REA

GitLabgit一個專案託管到兩個遠端倉庫

需求 之前一直採用的第三方的程式碼託管平臺,最近公司內部採購了一臺伺服器,來做公司內部的程式碼倉庫,所以需要將之前的程式碼新增到新的倉庫中。 實現 連線區域網的GitLab 設定本地的hosts檔案 192.168.*.** **.***

gitIntellij IDEA中Git外掛提交內容到遠端倉庫

首先感謝大家的支援!部分本篇部落格顯示的內容格式慘不忍睹,特意調整一下,希望對大家有所幫助。 已經在單機環境下使用一段時間Git了,發現Intellij IDEA中的Git外掛功能並不完善。 首先Intellij IDEA中Git本地倉庫必須建立在當前專案資料夾下,其它自

git修改文件後,提交到遠程倉庫

log csdn 文件 遠程 ase git add 提交 gin mon 原文地址:https://blog.csdn.net/nly19900820/article/details/73613654 修改文件後,怎麽提交到遠程倉庫1.git status 查看git是否

GitGit免密登入,使用ssh-keygen生成多個key分別用於公司的gitlab和自己的github倉庫

一、在git bash中執行 ssh-keygen -t rsa -C ‘[email protected]’ -f ~/.ssh/id_rsa_xxx 二、新增配置 在使用者目錄的.ssh目

toolgit gui本地倉庫操作

本篇文章將介紹git gui 本地倉庫的操作,方便大家在本地進行程式碼的檢視,對於多個版本的程式碼再也不用儲存多個包了。 ============================================================================

GIT[Git高階教程 (一)] 通過Tag標籤退版本修復bug

1 前言 本系列之所以取名”Git高階教程”,主要是教大家解決實際工作中遇到的問題,要求讀者會基本的Git用法和命令,請不要使用SourceTree這樣的工具,因為它讓你啥都不會、啥也不懂,git本身與Linux一脈相承,都是Linus torvalds寫的嘛,所以命令列才

Git遠端版本

“房子是租的 但生活不是” 1.故事的開始 遠端master分支下程式碼被不小心提交了很多垃圾程式碼或專案刪掉,想要回滾到以前的某一版本並刪除commit log。怎麼辦?情景如圖: 情景很簡單。老闆上傳了個檔案,我把他刪掉了。有一種辦法,把檔案再push下,但是也不想他

轉載git倉庫完整遷移並不丟失完整的log

Git倉庫遷移而不丟失log的方法要求能保留原先的commit記錄,應該如何遷移呢?同時,本地已經clone了原倉庫,要配置成新的倉庫地址,該如何修改呢?注意:如果使用了程式碼稽核工具Gerrit,那麼在進行操作之前需要將Gerrit關掉,等成功恢復後再將Gerrit開戶即可1、使用git push --mi

git全域性配置和單個倉庫的使用者名稱郵箱配置

Git全域性配置和單個倉庫的使用者名稱郵箱配置 學習git的時候, 大家剛開始使用之前都配置了一個全域性的使用者名稱和郵箱 $ git config --global user.name "github's Name" $ git config --global u

git 遠端

回滾分三步: (1)備份你當前的程式碼 庫一份,不是必須的操作,但是提醒要 做的,當然有可以用git branch backup 把當前的版本備份到一個新的分支 (2)git log找到要回滾的版本    (3)git reset --hard 要回滾到的版本號,比如 g

git代碼

而且 有時 分享 eve 目錄 錯誤 會有 9.png 烏龜 有時候我們用git提交代碼後發生了錯誤,代碼沖突了啊等等,我們需要將代碼回到以前的某個版本 git代碼回退有兩種辦法 一、git reset(推薦): 它是將最新的commit刪除,用以前的某個版本的代碼替代最新

gitGit 提示fatal: remote origin already exists 錯誤解決辦法

遠程 分享 mage mod dal -s lock 解決 ack 今天使用git 添加遠程github倉庫的時候提示錯誤:fatal: remote origin already exists. 最後找到解決辦法如下: 1、先刪除遠程 Git