第三章 git的版本回退功能

第三章 git的版本回退功能

一、使用场景

当前的repo里存在的一定是最新提交的版本,可要是想查看以前提交的版本呢,或是想回到以前提交的版本呢?

或者说,我想查看每次提交的信息该怎么办呢?


二、解决思路

使用命令 :

$ git log

并可以查看提交的日志信息,主要内容包含,版本(提交)编号、提交者信息、提交日期、提交的注释(从上到下)。

当然,一般来说其中最重要的信息是:版本编号(其中有HEAD标识的就是当前版本)、提交的注释。

因为查看日志信息的目的一般都是选择回退到某个版本,或是查看各个版本的提交内容,其中注释会给出每次提交内容的概述,版本号可用于回退到指定的版本。

所以,还可以通过为上面的命令添加参数,显示出较为简洁的信息:

$ git log --pretty=online

OK,通过上面的指令,现在我们就能获取一个库的版本提交日志了,通过日志的信息,就可以进行版本回退了。


三、解决方法

(1)通过HEAD指针

从解决思路中,可以发现,在日志信息中,有__HEAD__标识的就是当前版本,因此这里有个通过HEAD指针快速进行版本回退的方法,使用如下:

回退到上个版本:

$ git reset --hard HEAD^

回退到上上个版本:

$ git reset --hard HEAD^^

可以发现,每往前一个版本HEAD头上就多了一个**^,这就是利用HEAD**指针快速回退的方法。

(2)通过版本号

从日志中,我们可以获取每个版本的版本号,所以可以通过下面的命令

$ git reset --hard 版本号

进行版本回退,其中版本号不需要全部填写,只要填前几位可以确保指定版本的唯一性即可。


四、后续问题

(1)在进行版本回退过后,这时候查看

$ git log

就会发现,在现在版本之后提交的版本的日志信息都消失了,这时候如果再想回到回退前的版本就要使用命令:

$ git reflog

会显示出所有命令的日志信息,就是记录你每一条命令的日志。所以可以通过命令日志里的信息再次回到**“未来”的版本。**

(2)reset中的参数问题

在运行

$ git reset --hard HEAD^

此类命令时,–hard这个参数不能少,如果没有这个参数直接:

$ git reset  HEAD^

那么完成的操作是回到指定版本提交后的状态,举个例子:

现在版本1中有个文件test_1.txt,你对它进行修改,然后

git add test_1.txt

git commit -m"版本2"

那么此时的版本就是版本2了,接着你 git reset HEAD^

你会发现,test_1.txt中的内容并没有发生改变,此时只是相当于撤销了前面的git add 和 git commit指令,回到了版本1未进行任何操作的状态

当添加了hard这个参数过后,才会将内容也变为指定的版本。