1. 程式人生 > >分針網——每日分享:git提交錯了如何撤銷或者回退版本

分針網——每日分享:git提交錯了如何撤銷或者回退版本

git



http://www.f-z.cn/id/184


前言


前面給大家普及了暫存區的概念以及展示的工作區、版本庫中的暫存區和版本庫之間的關系,如果大家都理解的話,那麽今天的課程就很簡單了。 在上圖大家回顧一下,看這裏

正文 撤銷操作

	
	
		git checkout -- [file] 
	

如果你文件只是在工作區修改了,但是還沒提交到暫存區的時候,你可以用git checkout -- [file]來撤銷。簡單的說就是暫存區覆蓋工作區。這裏模擬一下,比如現在readme.txt裏面內容是first day,並且已經提交到暫存區了,此時修改readme.txt,內容改成second day.,然後執行git checkout -- readme.txt命令,你會發現readme.txt內容又變成first day了



	
	
		git reset HEAD
	

如果你文件在工作區修改了,並且也執行git add命令提交給暫存區了,那麽執行上面的git checkout -- [file]已經無效了,因為工作區跟暫存區已經一樣了,再怎麽覆蓋內容也一樣,這時候就應該使用git reset HEAD命令來撤銷,簡單的說就是讓HEAD覆蓋暫存區,因為此時的HEAD這邊的文件內容還是上次提交時的內容。現在模擬一下,現在有readme.txt跟hello.txt兩個文件,都經過修改


如圖可以看到,使用git status -s來查看的時候,紅色的M表示這2個文件都經過修改,使用git add .提交後在查看,發現都是綠色的M,表示都提交到暫存區了,這時候執行git reset HEAD hello.txt後在查看,發現hello.txt變成紅色M了,說明hello.txt從暫存區撤銷了。如果還想把工作區間的文件也撤回,就繼續執行上面的git reset HEAD readme.txt就行。
	
	
		git checkout HEAD [file] 
	

git checkout HEAD [file]命令是git checkout -- [file]和git reset HEAD的合成體,直接用HEAD覆蓋工作區,暫存區。如下圖中所示,一開始 工作區暫存區以及HEAD中文件內容都是first day.,此時修改readme.txt內容為second day.,然後執行git add .提交到暫存區,接著執行git checkout HEAD readme.txt命令,再查看readme.txt內容的時候你會發現變成了first day.

版本回退以及切換
	
	
		git reset --hard HEAD^ 
	

首先,Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交3628164...882e1e0(註意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。 先查看當前版本記錄,發現最近的兩個版本為b520a36 第一次提交和479c6fd 第二次提交

當前版本是b520a36 第一次提交,現在我們來執行git reset --hard HEAD^來回退到479c6fd 第二次提交版本,如圖:

	
	
		git reset --hard commit_id
	

如果你回退版本後又後悔了,想恢復最後那個版本怎麽辦,通過git reset --hard commit_id命令可以搞定,註意這裏的commit_id是版本號,只要記得版本號,你想切換到哪個版本都行,如果你忘記了剛才最後一個的版本號,可以通過git reflog來查看,這裏我們記得最後那次版本號為b520a36,執行git reset --hard b520a36

刪除操作
這裏介紹一下git中的刪除操作命令,以及意外刪除了該如何還原。
	
	
		git rm
	

執行git rm命令會同時刪除工作區跟暫存區中的指定文件,要慎重處理。
但是如果你意外刪除了也是可以恢復的。不過要分成2種情況處理:
1.還未執行git commit提交到HEAD的時候刪除文件,這時候直接使用git checkout HEAD [file]就能還原。

2.執行git commit提交到HAED後時候才刪除文件,這時候就只能執行git reset --hard HEAD^回退上一個版本。

結束
總結一下上面所學的:
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。 場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。


場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,使用git reset --hard HEAD^。




學習更多IT知識 加群:272292492





分針網——每日分享:git提交錯了如何撤銷或者回退版本