本内容根据廖雪峰的官方Git教程所编写,将操作记录下来做巩固知识所用。
本文主要从以下几个方面对Git的使用进行介绍:
本部分继续介绍时光穿梭机的内容,对其中的版本回退进行介绍。
现在,已经学会了修改文件,然后把修改提交到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 8835644] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
跟上述操作一样,不断的修改文件,又不断的将文件进行提交。现在可以回顾总共有三个版本的readme.txt文件已经入库,分别如下:
版本1:write a readme file
Git is a version control system.
Git is free software.
版本2:add distributed
Git is a distributed version control system.
Git is free software.
版本3:append GPL
Git is a distributed version control system.
Git is free software distributed under the GPL.
当然了,在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log
命令查看:
$ git log
commit 883564497bc877acf839dd2589a2cf8c6988e6a4 (HEAD -> master)
Author: legendhua
Date: Wed May 8 16:05:41 2019 +0800
append GPL
commit 88d343da5f03503622ef58308374895dbeb11099
Author: legendhua
Date: Wed May 8 12:19:31 2019 +0800
add distributed
commit 31b5d90aaa558fbb8a95596aea0becaf69af76cc
Author: legendhua
Date: Wed May 8 10:07:54 2019 +0800
write a readme file
git log
命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL
,上一次是add distributed
,最早的一次是write a readme file
。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数:
$ git log --pretty=oneline
883564497bc877acf839dd2589a2cf8c6988e6a4 (HEAD -> master) append GPL
88d343da5f03503622ef58308374895dbeb11099 add distributed
31b5d90aaa558fbb8a95596aea0becaf69af76cc write a readme file
上面我们看到的一堆数字,比如88356..是commit id(版本号)。我们现在了解了版本查询,下面介绍如何实现时光穿梭实现版本回退,回到指定版本。
回到add distributed的版本,应该怎么做呢?首先了解一下版本号的知识,在GIt中,HEAD表示当前版本,也就是最新的提交88356...,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
现在,我们要把当前版本append GPL
回退到上一个版本add distributed
,就可以使用git reset
命令:
$ git reset --hard HEAD^
HEAD is now at 88d343d add distributed
现在查看readme.txt文件,发现已经回退到上一个修改的版本。
$ cat readme.txt
Git is a distributed version control system.
Git is free software.
现在还可以继续回退到write a readme file版本,回退之前我们用git log再查看一下当前版本的状态,可以发现append GPL的版本已经不在了。
$ git log
commit 88d343da5f03503622ef58308374895dbeb11099 (HEAD -> master)
Author: legendhua
Date: Wed May 8 12:19:31 2019 +0800
add distributed
commit 31b5d90aaa558fbb8a95596aea0becaf69af76cc
Author: legendhua
Date: Wed May 8 10:07:54 2019 +0800
write a readme file
当前的版本HEAD为add distributed的版本,如果想回到回退前的append GPL怎么办,我们只需要找到append GPL的版本号,如果命令界面没有关闭的话,我们可以看到版本号为8835644...,采用上面回退的命令
$ git reset --hard 883564
HEAD is now at 8835644 append GPL
查看文件可以发现,我胡汉山又回来了,神奇不神奇。
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
如果命令行界面都关闭了,而且电脑也重启了,现在如何寻找特定的版本号呢,Git提供了一个命令git reflog
用来记录你的每一次命令
$ git reflog
8835644 (HEAD -> master) HEAD@{0}: reset: moving to 883564
88d343d HEAD@{1}: reset: moving to HEAD^
8835644 (HEAD -> master) HEAD@{2}: commit: append GPL
88d343d HEAD@{3}: commit: add distributed
31b5d90 HEAD@{4}: commit (initial): write a readme file
从历史命令中可以看到,append GPL的版本号为8835644,所以可以顺利的坐上时光车回去了。
小结
现在总结一下:
HEAD
指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。git log
可以查看提交历史,以便确定要回退到哪个版本,只能查看到当前修改以前的历史(包括当前),不能往后追寻。git reflog
查看命令历史,以便确定要回到未来的哪个版本。