现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改 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
Date: Wed Feb 15 09:46:52 2017 +0800
append GPL
commit 5011921a4f0616633b80edcbbf00a069a14db63e
Author: diego
Date: Wed Feb 15 09:41:49 2017 +0800
add distributed
commit 5acb254c4a133cbcf36459031b929a2432a12dc2
Author: diego
Date: Wed Feb 15 08:48:47 2017 +0800
wrote a readme file
git log 命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是 append GPL,上一次是 add distributed,最早的一次是 wrote a readme file。
如果嫌输出信息太多,可以试试加上 --pretty=oneline 参数:
$ 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……递增的数字,而是一个 SHA1 计算出来的一个非常大的数字,用十六进制表示。
因为 Git 是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
2.版本退回
现在我们要把 readme.txt 回退到上一个版本,也就是“add distributed”的那个版本,怎么做呢?
首先,Git 必须知道当前版本是哪个版本,在 Git 中,用 HEAD 表示当前版本,上一个版本就是 HEAD^,上上一个版本就是 HEAD^^,当然往上 100 个版本写 100 个 ^ 比较容易数不过来,所以写成 HEAD~100。
现在,我们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用 git reset 命令:
$ git reset --hard HEAD^
HEAD is now at 5011921 add distributed
看看 readme.txt 的内容是不是版本 add distributed:
$ cat readme.txt
Git is a distributed version control system.
Git is free software.
现在我们用 git log 再看看现在版本库的状态:
$ git log
commit 5011921a4f0616633b80edcbbf00a069a14db63e
Author: diego
Date: Wed Feb 15 09:41:49 2017 +0800
add distributed
commit 5acb254c4a133cbcf36459031b929a2432a12dc2
Author: diego
Date: Wed Feb 15 08:48:47 2017 +0800
wrote a readme file
3.版本前进
如果我要把 readme.txt 回到"append GPL"的版本,该怎么办?
如果命令行窗口还没有被关掉,我们可以顺着往上找啊找啊,找到那个 append GPL 的 commit id 是 5c96006……,就可以指定回到某个版本:
$ git reset --hard 5c96006
HEAD is now at 5c96006 append GPL
版本号没必要写全,前几位就可以了,Git 会自动去找。
如果命令窗口关掉了,找不回 commit id,该怎么办呢?
Git 提供了一个命令 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,有了这个就可以回到该版本了。