一、問題描述
在利用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...