查看修改的历史记录 git log 命令 和 返回上一次修改版本 git reset 、git reflog(五)

上一篇,已经学会了修改文件,然后再把修改文件提交到Git版本库,now,再重复执行一次,修改index.html文件如下:

然后执行添加、提交:

像这样,你不断对文件进行修改,然后不断提交修改到版本库里,每次修改到一定程度时,再提交;一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把之前的修改记录全部丢失。

那么现在,回顾一下 index.html 文件一共有几个版本被提交到Git版本库里:

版本1:first commit ;

版本2:change content ;

版本3:add content;

在实际工作中,若修改了N次该文件时,在Git中,我们可以使用命令  git log 查看历史修改记录,如下:

命令 git log 表示从最近到最远的提交日志

从上图可知看到3次提交,最近一次是add content,其次change content,最后是first commit;

如果要简化信息,还可以在命令 git log 后面添加 --pretty=oneline 参数,如下图:

友情提示:黄色一大串类似67b46cl....的是 commit id (版本号),在找回某个版本时,发挥巨大作用;

为什么 commit id 需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。


目前index.html文件的版本为add content;如果说要返回上一个版本change content,怎么做呢?

第一:首先,Git必须知道当前版本是哪个版本,在Git中,我们可以用 HEAD 表示当前版本(如上图所示),那么上一个版本为:HEAD^  。再上上一个版本为:HEAD^^ 。以此类推,100个版本的话就有100个^,表示为 HEAD~100

现在,我们把当前版本add content 返回到上一个版本 change content,使用 git reset 命令,如下所示:

--hard 参数?后面再讲。

此时文件index.html里的内容变回了版本change content,使用 命令 cat 查看:

第二:我们可以继续地返回上一个版本 first commit ;但是现在用命令 git log 查看现在版本库的记录:

从上图可知,最新的那个版本 add content 没有显示,怎么办? 

只要上面的命令行窗口还没有被关掉,你就可以滚动滑轮顺着往上一直找。

找到最新版本 add content 的 commit id 是 67b46c1c4...。接下来就可以指定回到某个最新的版本,如下图:

如上图所示,现在又回到了最新的版本了。

那么 commit id (版本号)不需要写全,开头前几位(最好大于5位数),Git 就会自动去寻找且不易重复其他 版本号;


第三:万一返回到某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?

找不到新版本的commit id (版本号)怎么办?

当你用 $ git reset --hard HEAD^ 返回到版本change content 时,再想恢复到最新版本 add content ,就必须要找到 add content 版本的commit id(版本号), Git 提供了一个命令 git reflog 用来记录你的每一次命令,如下:

上图可知:add content 的 commit id(版本号)是 67b46c1。


小结:

  1. HEAD 指向的版本就是当前最新的版本,Git允许我们在版本的历史之间穿梭,使用命令 git reset --hard commit-id。 

  2. 穿梭前,可以使用 git log 查看提交历史,以便确定要回退到哪个版本。

  3. 要重返未来,使用 git reflog 查看命令历史,以便确定要回到未来的哪个版本。

转自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 

 

展开阅读全文

没有更多推荐了,返回首页