版本回退
如上,我们已经学会了修改文件,现在我继续对readme.txt
文件进行修改,再增加一行
内容为2333.继续执行命令如下:
那么现在等于一共对
readme.txt
做过三次修改了。在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log
命令查看(这里可以看出,提交注释很重要啊,不然都不知道之前提交了什么):
用git log查看
git log
命令显示从最近到最远的显示日志,我们可以看到最近三次提交,最近的一次是,增加内容为2333.上一次是重写了两行关于git的内容,删除了hello word,第一次默认是hello word 。如果嫌上面显示的信息太多的话,我们可以使用命令 git log –pretty=oneline
,如下:
【那个刺眼的HEAD→master先不用管,可以自行百度HEAD的指向问题】
现在我想使用版本回退操作,我想把当前的版本回退到上一个版本,要使用什么命令呢?可以使用如下2种命令:
第一种是:
git reset –hard HEAD^
那么如果要回退到上上个版本只需把HEAD^
改成 HEAD^^
以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:第二种:
git reset –hard HEAD~100
即可。未回退之前的readme.txt
内容如下:
未回退前,文本内容是这样的
如果想回退到上一个版本的命令如下操作:
回退到上一个版本啦再来查看下 readme.txt
内容如下:通过命令cat readme.txt
查看:
可以看到,内容已经回退到上一个版本了。我们可以继续使用git log
来查看下历史记录信息,如下:
我们看到 增加333333 内容我们没有看到了,但是现在我想回退到最新的版本,如:有2333的内容要如何恢复呢?我们可以通过版本号回退,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个2333的commit id
是d9d...2e
,使用命令git reset –hard 版本号
,于是就可以指定回到未来的某个版本(版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了)。
但是现在的问题假如我已经关掉过一次命令行或者2333内容的版本号我并不知道呢?要如何知道增加2333内容的版本号呢?可以通过如下命令即可获取到版本号:git reflog
如下:
通过上面的显示我们可以知道,增加内容3333的版本号是 d9dddc8.我们现在可以命令
git reset –hard d9dddc8来恢复了。演示如下:
【解释一下HEAD是啥】
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL(这个图是我用的别人的图,按照上文的实际操作,这里是指向2333):
git-head
改为指向add distributed(也就是第二个版本,文件重写了两行关于git的内容,删除了hello word):
git-head-move
然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。
网友评论