現(xiàn)在,你已經(jīng)學(xué)會了修改文件,然后把修改提交到Git版本庫,現(xiàn)在,再練習(xí)一次,修改 readme.txt 文件如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
然后嘗試提交:
$ git add readme.txt
$ git commit -m "append GPL"
[master 5c96006] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
1.查看文件版本
用 git log 命令查看文件版本:
$ git log
commit 5c960066252bcaafc91a539438a825c93edd8c31
Author: diego <xxxxx@xx.com>
Date: Wed Feb 15 09:46:52 2017 +0800
append GPL
commit 5011921a4f0616633b80edcbbf00a069a14db63e
Author: diego <xxxxx@xx.com>
Date: Wed Feb 15 09:41:49 2017 +0800
add distributed
commit 5acb254c4a133cbcf36459031b929a2432a12dc2
Author: diego <xxxxx@xx.com>
Date: Wed Feb 15 08:48:47 2017 +0800
wrote a readme file
git log 命令顯示從最近到最遠(yuǎn)的提交日志,我們可以看到3次提交,最近的一次是 append GPL,上一次是 add distributed,最早的一次是 wrote a readme file。
如果嫌輸出信息太多,可以試試加上 --pretty=oneline 參數(shù):
$ git log --pretty=oneline
5c960066252bcaafc91a539438a825c93edd8c31 append GPL
5011921a4f0616633b80edcbbf00a069a14db63e add distributed
5acb254c4a133cbcf36459031b929a2432a12dc2 wrote a readme file
一大串類似 3628164...882e1e0 的是 commit id(版本號),和 SVN 不一樣, Git 的 commit id 不是1,2,3……遞增的數(shù)字,而是一個(gè) SHA1 計(jì)算出來的一個(gè)非常大的數(shù)字,用十六進(jìn)制表示。
因?yàn)?Git 是分布式的版本控制系統(tǒng),后面我們還要研究多人在同一個(gè)版本庫里工作,如果大家都用1,2,3……作為版本號,那肯定就沖突了。
2.版本退回
現(xiàn)在我們要把 readme.txt 回退到上一個(gè)版本,也就是“add distributed”的那個(gè)版本,怎么做呢?
首先,Git 必須知道當(dāng)前版本是哪個(gè)版本,在 Git 中,用 HEAD 表示當(dāng)前版本,上一個(gè)版本就是 HEAD^,上上一個(gè)版本就是 HEAD^^,當(dāng)然往上 100 個(gè)版本寫 100 個(gè) ^ 比較容易數(shù)不過來,所以寫成 HEAD~100。
現(xiàn)在,我們要把當(dāng)前版本“append GPL”回退到上一個(gè)版本“add distributed”,就可以使用 git reset 命令:
$ git reset --hard HEAD^
HEAD is now at 5011921 add distributed
看看 readme.txt 的內(nèi)容是不是版本 add distributed:
$ cat readme.txt
Git is a distributed version control system.
Git is free software.
現(xiàn)在我們用 git log 再看看現(xiàn)在版本庫的狀態(tài):
$ git log
commit 5011921a4f0616633b80edcbbf00a069a14db63e
Author: diego <xxxxxxxx@qq.com>
Date: Wed Feb 15 09:41:49 2017 +0800
add distributed
commit 5acb254c4a133cbcf36459031b929a2432a12dc2
Author: diego <xxxxxxxx@qq.com>
Date: Wed Feb 15 08:48:47 2017 +0800
wrote a readme file
3.版本前進(jìn)
如果我要把 readme.txt 回到"append GPL"的版本,該怎么辦?
如果命令行窗口還沒有被關(guān)掉,我們可以順著往上找啊找啊,找到那個(gè) append GPL 的 commit id 是 5c96006……,就可以指定回到某個(gè)版本:
$ git reset --hard 5c96006
HEAD is now at 5c96006 append GPL
版本號沒必要寫全,前幾位就可以了,Git 會自動(dòng)去找。
如果命令窗口關(guān)掉了,找不回 commit id,該怎么辦呢?
Git 提供了一個(gè)命令 git reflog 用來記錄你的每一次命令:
$ git reflog
5c96006 HEAD@{0}: reset: moving to 5c96006
5011921 HEAD@{1}: reset: moving to HEAD^
5c96006 HEAD@{2}: commit: append GPL
5011921 HEAD@{3}: commit: add distributed
5acb254 HEAD@{4}: commit (initial): wrote a readme file
在這里我們可以看到版本 append GPL 的 commit id 是 5c96006,有了這個(gè)就可以回到該版本了。