1. 程式人生 > >git 回滾遠端倉庫(revert、reset、rebase)

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

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

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

關於遠端倉庫回滾

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

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

1、刪除最後一次提交

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

    git revert HEAD
    git push origin master

注意,revertreset的區別:

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之後本地庫落後於遠端庫一個版本,因此需要強制提交。

2、刪除歷史某次提交

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

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

    git rebase -i "commit id"^

執行該條命令之後會開啟一個編輯框,內容如下,列出了包含該次提交在內之後的所有提交。然後在編輯框中刪除你想要刪除的提交所在行,然後儲存退出就好啦,如果有衝突的需要解決衝突。接下來,執行以下命令,將本地倉庫提交到遠端庫就完成了:

    git push origin master -f

3、修改歷史某次提交

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

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

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

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

相關推薦

git 遠端倉庫revertresetrebase

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

Gitgit如何遠端倉庫

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

git如何遠端倉庫

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

Git遠端版本

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

git 遠端

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

git 到tag版本 並提交遠端倉庫

      最近工作中遇到了git需要回滾的問題,操作了幾次後發現並不是以前用svn那樣的概念,想用本地的倉庫的程式碼 reset 以後 覆蓋是不可行的,經過查了資料和同事的幫忙,終於是可以了,現在把整個操作步驟記錄下來,FYI!       這裡我的tag是   v.1.

【Gitlab】GITmaster分支到指定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恢復之前版本的兩種方法resetrevert圖文詳解

強制 之前 res 合作 希望 本地庫 有時 做成 本地 一、問題描述在利用github實現多人合作程序開發的過程中,我們有時會出現錯誤提交的情況,此時我們希望能撤銷提交操作,讓程序回到提交前的樣子,本文總結了兩種解決方法:回退(reset)、反做(revert)。 二、背

Git簡單使用與遠端倉庫Github的使用

Git簡單使用與遠端倉庫(Github)的使用 1 前言 對於Git的使用,學習動機有兩點,第一是管理Github的時候比較麻煩,這點我做過兩次嘗試(桌面版Github以及Github的網頁級),這很令人不爽,滑鼠操作讓人窒息,而且上傳時速度比較捉急。第二是基於實際個人需求的,我

git分支並在遠端生效

用途:程式碼提交錯誤時返回前次或者前幾次提交的版本 (1)git log/reflog打印出git提交的日誌如下所示 (2)選擇需要回滾的提交記錄,複製提交號 (3)執行回滾命令 git reset --hard 提交號 (4)提交回滾的程式碼 git commit -

git 強制提交 一條龍粗暴直接

首先:   git reset –hard 版本號 檢視一下你要回退到哪個版本;  git reset --hard XXXXX(版本號);   git log 檢視一下日誌是否回退成功 (此時回

git 本地專案推送到遠端倉庫或者倉庫分支Window版-01

初始化專案git init 確保安裝了git 在專案根目錄下進入 git命令列 使用git init 命令 使用 git add .命令 使用 git commit

Git高階教程- 遠端倉庫版本退方法

1 簡介 最近在使用git時遇到了遠端分支需要版本回滾的情況,於是做了一下研究,寫下這篇部落格。 2 問題 如果提交了一個錯誤的版本,怎麼回退版本? 如果提交了一個錯誤的版本到遠端分支,怎麼回退遠端分支版本? 如果提交了一個錯誤的版本到公共遠端分支,又該怎麼回

Git管理多個遠端倉庫GitHub和Coding

兩個空程式碼倉庫 如果是兩個倉庫都是空的,就直接在 .git/config 中新增遠端地址 [remote "origin"] url = https://github.com/younglaker/octjs.git url = https

經驗總結-完整介紹Android Studio中Git的使用之在GitHub上建立一個遠端倉庫

說完本地Git倉庫,那麼如何將專案上傳至遠端的GitHub倉庫呢?首先我們需要有一個託管平臺,然後需要建立一個倉庫。現在我們開始註冊一個GitHub賬號,然後去後new 一個倉庫吧: 一、首先我們需

git到某個版本操作

單機 技術分享 ast ima logs strong .cn master blog git回滾到某個版本操作: 1.git log //查看指過去的版本 2. git reset --hard 復制上面commit後的字符串到此處 如果只想 回滾單機的,那麽到

Git代碼到某個commit

git回滾 origin for 命令 undefine defined -- bsp reset 回退命令:$ git reset --hard HEAD^ 回退到上個版本$ git reset --hard HEAD~3 回退到前3次提交之

git merge 撤銷與git

eve comm 需要 恢復 clas .com class sts nsh git merge提交後恢復 http://blog.psjay.com/posts/git-revert-merge-commit/ git回滾 https://www.jianshu.com/

git 到任意版本

pan strong commit -h password pty font QQ -- git回滾到任意版本 1.先顯示提交的log $ git log -3 commit 4dc08bb8996a6ee02f Author: Mark <[email protected]&g

git

tab In cell AC IT git reset _id set reset git reset --hard <commit_id> git push origin HEAD --force git回滾