git 回到指定版本

2022-05-13 05:37:09 字數 1398 閱讀 5035

一、問題描述

在利用github實現多人合作程式開發的過程中,我們有時會出現錯誤提交的情況,此時我們希望能撤銷提交操作,讓程式回到提交前的樣子,本文總結了兩種解決方法:回退(reset)、反做(revert)。

二、背景知識

git的版本管理,及head的理解

使用git的每次提交,git都會自動把它們串成一條時間線,這條時間線就是乙個分支。如果沒有新建分支,那麼只有一條時間線,即只有乙個分支,在git裡,這個分支叫主分支,即master分支。有乙個head指標指向當前分支(只有乙個分支的情況下會指向master,而master是指向最新提交)。每個版本都會有自己的版本資訊,如特有的版本號、版本名等。如下圖,假設只有乙個分支:

三、解決方法

方法一:git reset

原理: git reset的作用是修改head的位置,即將head指向的位置改變為之前存在的某個版本,如下圖所示,假設我們要回退到版本一:

適用場景: 如果想恢復到之前某個提交的版本,且那個版本之後提交的版本我們都不要了,就可以用這種方法。

具體操作:

1. 檢視版本號:

可以使用命令「git log」檢視:

2. 使用「git reset --hard 目標版本號」命令將版本回退:

再用「git log」檢視版本資訊,此時本地的head已經指向之前的版本:

3. 使用「git push -f」提交更改:

此時如果用「git push」會報錯,因為我們本地庫head指向的版本比遠端庫的要舊:

所以我們要用「git push -f」強制推上去,就可以了:

在github圖形化介面上看,遠端庫的head也已經指向目標版本:

回退成功!

方法二:git revert

原理: git revert的作用通過反做建立乙個新的版本,這個版本的內容與我們要回退到的目標版本一樣,但是head指標是指向這個新生成的版本,而不是目標版本。如下圖所示,假設我們要回退到版本一,版本四的內容和版本一是一樣的:

適用場景: 如果我們想恢復之前的某一版本(該版本不是merge型別),但是又想保留該目標版本後面的版本,記錄下這整個版本變動流程,就可以用這種方法。

具體操作:

1. 檢視版本號:

可以通過命令列檢視:

2.使用「git revert -n 版本號」反做,並使用「git commit -m 版本名」提交:

(1)反做,使用「git revert -n 版本號」:

注意: 這裡可能會出現衝突,那麼需要手動修改衝突的檔案。而且要git add 檔名。

(2)提交,使用「git commit -m 版本名」:

此時可以用「git log」檢視本地的版本資訊,可見多生成了乙個新的版本:

3.使用「git push」推上遠端庫:

檢視github上顯示的遠端庫版本資訊:

Git 學習筆記 回到過去版本

在團隊協作過程中,經常會出現自己的 被別人修改的情況,需要切換到舊版本檢視歷史 xcode整合的git外掛程式功能有限,不能像在eclipse中git外掛程式可以檢視所有歷史版本。git作為版本管理工具自身是提供這些功能,今天在這裡整理下 1.首先通過git log 1.txt,檢視檔案的修改歷史,...

git回退到指定版本

git回退 到指定版本 1.通過git log命令或git管理工具查詢要退回到的提交記錄的雜湊值 類似 25694fdd0bc5bc111111e409047a54f386c2db55 2.根據雜湊值回退本地 庫 該雜湊值對應的提交會被保留 git reset hard 雜湊值 3.強制推送到遠端伺...

git 回到上乙個版本

本人常用下面的命令 git reset hard head 1 git reset head filename 把這個 file 移除暫緩區,其實就是相當於沒用 add這個 file git commit am 提交 提交暫緩區 git reset head 撤銷最近一次 commit git re...