第三章 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这个参数过后,才会将内容也变为指定的版本。