版本回退
如上昼丑,我們已經(jīng)學(xué)會了修改文件粟焊,現(xiàn)在我繼續(xù)對readme.txt
文件進行修改茂翔,再增加一行
內(nèi)容為2333.繼續(xù)執(zhí)行命令如下:
那么現(xiàn)在等于一共對
readme.txt
做過三次修改了叨吮。在實際工作中宋列,我們腦子里怎么可能記得一個幾千行的文件每次都改了什么內(nèi)容重荠,不然要版本控制系統(tǒng)干什么。版本控制系統(tǒng)肯定有某個命令可以告訴我們歷史記錄虚茶,在Git中戈鲁,我們用git log
命令查看(這里可以看出,提交注釋很重要啊嘹叫,不然都不知道之前提交了什么):
git log
命令顯示從最近到最遠的顯示日志婆殿,我們可以看到最近三次提交,最近的一次是,增加內(nèi)容為2333.上一次是重寫了兩行關(guān)于git的內(nèi)容罩扇,刪除了hello word婆芦,第一次默認是hello word 。如果嫌上面顯示的信息太多的話喂饥,我們可以使用命令 git log –pretty=oneline
消约,如下:
【那個刺眼的HEAD→master先不用管,可以自行百度HEAD的指向問題】
現(xiàn)在我想使用版本回退操作员帮,我想把當(dāng)前的版本回退到上一個版本或粮,要使用什么命令呢?可以使用如下2種命令:
第一種是:
git reset –hard HEAD^
那么如果要回退到上上個版本只需把HEAD^
改成 HEAD^^
以此類推捞高。那如果要回退到前100個版本的話氯材,使用上面的方法肯定不方便,我們可以使用下面的簡便命令操作:第二種:
git reset –hard HEAD~100
即可硝岗。未回退之前的readme.txt
內(nèi)容如下:
如果想回退到上一個版本的命令如下操作:
再來查看下 readme.txt
內(nèi)容如下:通過命令cat readme.txt
查看:
可以看到,內(nèi)容已經(jīng)回退到上一個版本了型檀。我們可以繼續(xù)使用git log
來查看下歷史記錄信息冗尤,如下:
我們看到 增加333333 內(nèi)容我們沒有看到了,但是現(xiàn)在我想回退到最新的版本胀溺,如:有2333的內(nèi)容要如何恢復(fù)呢裂七?我們可以通過版本號回退,只要上面的命令行窗口還沒有被關(guān)掉月幌,你就可以順著往上找啊找啊碍讯,找到那個2333的commit id
是d9d...2e
,使用命令git reset –hard 版本號
,于是就可以指定回到未來的某個版本(版本號沒必要寫全扯躺,前幾位就可以了捉兴,Git會自動去找蝎困。當(dāng)然也不能只寫前一兩位,因為Git可能會找到多個版本號倍啥,就無法確定是哪一個了)禾乘。
但是現(xiàn)在的問題假如我已經(jīng)關(guān)掉過一次命令行或者2333內(nèi)容的版本號我并不知道呢?要如何知道增加2333內(nèi)容的版本號呢虽缕?可以通過如下命令即可獲取到版本號:git reflog
如下:
通過上面的顯示我們可以知道始藕,增加內(nèi)容3333的版本號是 d9dddc8.我們現(xiàn)在可以命令
git reset –hard d9dddc8來恢復(fù)了。演示如下:
【解釋一下HEAD是啥】
Git的版本回退速度非车鳎快伍派,因為Git在內(nèi)部有個指向當(dāng)前版本的HEAD指針,當(dāng)你回退版本的時候剩胁,Git僅僅是把HEAD從指向append GPL(這個圖是我用的別人的圖诉植,按照上文的實際操作,這里是指向2333):
改為指向add distributed(也就是第二個版本昵观,文件重寫了兩行關(guān)于git的內(nèi)容晾腔,刪除了hello word):
然后順便把工作區(qū)的文件更新了。所以你讓HEAD指向哪個版本號啊犬,你就把當(dāng)前版本定位在哪灼擂。