上一小節(jié)我們學會了如何修改文件,并提交到Git版本庫中轨帜。我們再練習一次衩椒,修改love.txt文件如下:
I love you so much as the mouse like rice.
Do you know?
Every day
之后提交:
git add love.txt
git commit -m "append"
命令行返回如下:
[master 37ae842] append
1 file changed, 1 insertion(+)
這樣頻繁地修改文件、提交文件到版本庫的過程苟弛,如同玩單機版RPG游戲時阁将,我們在打BOSS之前會手動存盤,以防萬一被殺掉做盅,可以從最近的記錄開始。Git也是如此亭敢,修改到一定程度可以手動保存图筹,利用commit
這個命令。如果文件改亂了扣溺,還可以從最近的一個commit
恢復瓜晤,而不是從頭開始。
現(xiàn)在哈恰,我們想查找love.txt
中一共修改了幾次志群,我們可以利用git log
命令查找歷史。
git log
命令行返回如下信息:
commit 37ae8429ec61ed6e43e5251df9ed729f831e7544 (*HEAD -> master*)
Author: xxlquanrou <xxlquanrou@163.com>
Date: Sun Jan 6 14:05:41 2019 +0800
append
commit 664f71e56621d229f2d98da0801aa3b1cf0c91ea
Author: xxlquanrou <xxlquanrou@163.com>
Date: Sat Dec 29 22:39:30 2018 +0800
add a sentence
commit b372d91bb9765311ce5d31bb2d1b083902a2244c
Author: xxlquanrou <xxlquanrou@163.com>
Date: Fri Dec 28 23:26:12 2018 +0800
a love song
我們從上面的信息中可以知道荠医,共提交了3次修改桑涎,最近的一次是append
,上一次是add a sentence
娃胆,第一次是a love song
等曼。
友情提示:上面類似37ae8429ec61e...
的是commit id
(版本號)凿蒜,是SHA1計算出的非常龐大的數(shù)字胁黑,16進制表示,具有唯一性漂洋。另外力喷,你的跟我的肯定不一樣.
Git中,HEAD
相當于C語言中的指針爽冕,指向當前版本披蕉,此時指最新提交的37ae842
,上一個版本是HEAD^
没讲,上上一個版本是HEAD^^
,依次類推爬凑,50個版本可以寫50個^
,不過不太容易數(shù)嘁信,可以寫成HEAD-50
。
現(xiàn)在穿剖,把當前版本append
退回到上上一個版本a love song
卦溢,可以使用git reset
命令:
git reset --hard HEAD^^
命令行回復信息如下:
HEAD is now at b372d91 a love song
現(xiàn)在使用cat
命令,查看love.txt
中的內容贬芥,是不是回到了版本a love song
:
cat love.txt
命令行回復:
I love you as the mouse like rice.
果然回到了第一次”遇見“的地方~
我們可以用git log
命令查看一下現(xiàn)在版本庫的情況:
git log
命令行回復如下:
commit b372d91bb9765311ce5d31bb2d1b083902a2244c (*HEAD -> master*)
Author: xxlquanrou <xxlquanrou@163.com>
Date: Fri Dec 28 23:26:12 2018 +0800
a love song
仔細對比蘸劈,發(fā)現(xiàn)中間的兩處修改的”存根“不見了尊沸,感覺像穿越回古代贤惯,回不去了壹甥!腫么破壶熏?
莫急。只要別手賤將剛才的命令行窗口關閉溯职,就還有補救的辦法帽哑。例如,想找回最近修改的那個版本apend
僻族,先找到它的commit id
版本號37ae84
屡谐,然后使用git reset —hard
命令可以回到現(xiàn)代:
git reset --hard 37ae84
版本號沒必要寫全,Git可以根據(jù)前面幾位自動判斷度秘。
命令行回復如下:
HEAD is now at 37ae842 append
再次查看love.txt
中的內容:
cat love.txt
命令行回復如下:
I love you so much as the mouse like rice.
Do you know?
Every day
哈哈饵撑,我胡漢三又回來啦~
假如,你回退到了某個版本垢乙,關掉了電腦语卤,過了幾天又想回到最新的版本,你不知道此版本的commit id
羊壹,可以使用git reflog
命令查看你的每一次命令:
git reflog
命令行回復如下:
37ae842 (*HEAD -> master*) HEAD@{0}: reset: moving to 37ae84
b372d91 HEAD@{1}: reset: moving to HEAD^^
37ae842 (*HEAD -> master*) HEAD@{2}: commit: append
664f71e HEAD@{3}: commit: add a sentence
b372d91 HEAD@{4}: commit (initial): a love song
從上面可以看到齐婴,哪個版本的id號都是一目了然的。
現(xiàn)在的你情妖,可以在現(xiàn)在和過去之間隨意穿梭啦~
課后小結來啦:
HEAD
指向的是當前版本,是一個指針毡证×暇Γ可以使用命令git reset --hard commit_id
進行版本之間的穿越,也可以使用相對關系git reset --hard HEAD^
進行版本之間的轉換恤煞。- 想回到過去居扒,使用
git log
指令可以查看歷史命令,確定想要回到歷史哪個版本(針對當前版本來說)喜喂。- 想穿越到未來,使用
git reflog
命令可以查看歷史命令照弥,確定要回到未來的哪個版本(針對當前版本來說)诈茧。- 查看當前版本中文件內容,使用指令
cat <fileName>
曾沈。
本小節(jié)到此結束鸥昏,預知后事如何,且聽下回分解哈~