撤銷修改
比如我現(xiàn)在在readme.txt
文件里面增加一行 內(nèi)容為5555
倚舀,我們先通過命令查看如下:
在我未提交之前,我發(fā)現(xiàn)添加5555
內(nèi)容有誤忍宋,所以我得馬上恢復(fù)以前的版本痕貌,現(xiàn)在我可以有如下幾種方法可以做修改:
第一:如果我知道要?jiǎng)h掉那些內(nèi)容的話,直接手動(dòng)更改去掉那些需要的文件糠排,然后add
添加到暫存區(qū)舵稠,最后commit
掉。
第二:我可以按以前的方法直接恢復(fù)到上一個(gè)版本。使用 git reset –hard HEAD^
但是現(xiàn)在我不想使用上面的2種方法哺徊,我想直接想使用撤銷命令該如何操作呢室琢?首先在做撤銷之前,我們可以先用 git status
查看下當(dāng)前的狀態(tài)落追。如下所示:
可以發(fā)現(xiàn)盈滴,Git會(huì)告訴你,git checkout -- file
可以丟棄工作區(qū)的修改轿钠,如下命令:git checkout -- readme.txt
,命令 git checkout -- readme.txt
意思就是吟温,把readme.txt
文件在工作區(qū)做的修改全部撤銷玲昧,這里有2種情況:
一種是readme.txt
自修改后還沒有被放到暫存區(qū)浪耘,現(xiàn)在宾肺,撤銷修改就回到和版本庫(kù)一模一樣的狀態(tài);
一種是readme.txt
已經(jīng)添加到暫存區(qū)后贷腕,又做了修改烈菌,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)花履。
總之芽世,就是讓這個(gè)文件回到最近一次git commit
或git add
時(shí)的狀態(tài)。
【特別提示:git checkout -- file
命令中的--
很重要济瓢,沒有--
,就變成了“切換到另一個(gè)分支”的命令妹卿,我們?cè)诤竺娴姆种Ч芾碇袝?huì)再次遇到git checkout
命令旺矾。】
第二種情況,添加了內(nèi)容铺纽,還git add
到暫存區(qū)了柬帕,不同的是,還沒有添加其他的內(nèi)容狡门,也還沒有commit
(也就是錯(cuò)誤的添加了6666陷寝,然后將6666放到了暫存區(qū)內(nèi)):,
Git同樣告訴我們其馏,用命令git reset HEAD file
可以把暫存區(qū)的修改撤銷掉(unstage)凤跑,重新放回工作區(qū):
git reset
命令既可以回退版本,也可以把暫存區(qū)的修改回退到工作區(qū)叛复。當(dāng)我們用HEAD
時(shí)仔引,表示最新的版本扔仓。
再用git status
查看一下,現(xiàn)在暫存區(qū)是干凈的咖耘,工作區(qū)有修改:
還記得如何丟棄工作區(qū)的修改嗎翘簇?
$ git checkout -- readme.txt
$ git status
現(xiàn)在鲤看,假設(shè)你不但改錯(cuò)了東西缘揪,還從暫存區(qū)提交到了版本庫(kù)耍群,怎么辦呢义桂?還記得版本回退那一節(jié)嗎?可以回退到上一個(gè)版本蹈垢。不過慷吊,這是有條件的,就是你還沒有把自己的本地版本庫(kù)推送到遠(yuǎn)程【敲重點(diǎn)曹抬,只是commit
溉瓶,還沒有推到遠(yuǎn)程倉(cāng)庫(kù)里】。還記得Git是分布式版本控制系統(tǒng)嗎谤民?我們后面會(huì)講到遠(yuǎn)程版本庫(kù)堰酿,一旦你把“錯(cuò)誤的消息”提交推送到遠(yuǎn)程版本庫(kù),你就真的慘了……
<br >
【小結(jié)】
場(chǎng)景1:當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容张足,想直接丟棄工作區(qū)的修改時(shí)触创,用命令git checkout -- file
。
場(chǎng)景2:當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容为牍,還添加到了暫存區(qū)時(shí)哼绑,想丟棄修改,分兩步碉咆,第一步用命令git reset HEAD file
抖韩,就回到了場(chǎng)景1,第二步按場(chǎng)景1操作疫铜。
如果添加到暫存區(qū)后茂浮,又做了新的修改,用git checkout -- file
回到添加到暫存區(qū)后的狀態(tài)壳咕,也就是場(chǎng)景2剛開始那種情況励稳。然后再按照?qǐng)鼍?剛開始的情況進(jìn)行操作。
場(chǎng)景3:已經(jīng)提交了不合適的修改到版本庫(kù)(已經(jīng)commit
了)時(shí)囱井,想要撤銷本次提交驹尼,參考<u>版本回退</u>一節(jié),不過前提是沒有推送到遠(yuǎn)程庫(kù)庞呕。
刪除文件
假如我現(xiàn)在版本庫(kù)learngit目錄添加一個(gè)文件b.txt
,然后提交新翎。如下:
一般情況下程帕,可以直接在文件目錄中把文件刪了,或者使用如上rm
命令:rm b.txt
地啰,如果我想徹底從版本庫(kù)中刪掉了此文件的話愁拭,可以再執(zhí)行commit命令
提交掉git commit -m "remove test.txt"
,現(xiàn)在目錄是這樣的
只要沒有commit
之前亏吝,如果我想在版本庫(kù)中恢復(fù)此文件如何操作呢岭埠?
可以使用如下命令git checkout -- b.txt
,如下所示:
【小結(jié)】
命令git rm
用于刪除一個(gè)文件蔚鸥。如果一個(gè)文件已經(jīng)被提交到版本庫(kù)惜论,那么你永遠(yuǎn)不用擔(dān)心誤刪,但是要小心止喷,你只能恢復(fù)文件到最新版本馆类,你會(huì)丟失<b>最近一次提交后你修改的內(nèi)容。</b>