![](https://i-blog.csdnimg.cn/blog_migrate/0eab25e9fe626d4e51313440b6c16ead.png)
Git历史版本查看(log)和前进后退(reset)
该篇主要讲解历史版本的查看以及切换,涉及的命令主要包括git log和git reset两个命令
文章目录
1、历史版本的查看
对于版本的查看命令主要是git log以及它的变形。
1.1、git log
其中包含五项信息
- 提交的索引值(哈希值)commit
- 提交的作者Author,这与最开始配置时的git config信息相同
- 提交时间Date
- HEAD指针指向当前的版本
1.2、git log --pretty=oneline
相较于不带参数的git log,带参数的命令相关信息可以在一行进行显示,对于拥有大量提交记录来说显示比较好。其中包含三项信息:
- 索引值(哈希值)
- 提交信息
- HEAD指针指向的记录
1.3、git log --oneline
如果不带pretty参数,最开始的索引值变得更精简,只显示原始索引值的前7位进。
1.4、git reflog
reflog 相较于oneline参数多了一个 HEAD{_} 参数,这个参数主要告诉我们我们如果想要移动到对应的版本需要移动几步。
在后续的操作中可能会遇到这样的图,git reflog不仅包含了提交的相应信息②,还包括你移动的历史记录①。
2、版本的后退
版本的移动实质就是移动HEAD指针的前进后退,涉及的命令主要是git reset
2.1、基于索引值的后退(推荐)
- git reflog —hard [索引值]
可以看得出来,我们只需要指定我们想要达到的版本的索引值前7位就可以成功后退。对应的文件内容也做了相应的修改。当我们再次执行git reflog的方法时,内容发生了变化。
可以很明显的看出来,我们 HEAD指针 指向了我们之前指向的版本。
2.2、基于^符号的后退
^符号只能向后退不能进行前进操作。
- git reset --hard HEAD^^^
向后退3步,^的个数制定了后退的步数
这里我们向后退一步,对应的log中也可以看的出来。HEAD指针指向了下一个节点。
2.2、基于~符号的后退
同^符号相同,~符号只能进行后退操作
- git reset --hard HEAD~[后退的步数]
这里我们指定向后退两步。
3、版本的前进
版本前进的命令只能通过索引值的方式进行前进。前面我们也说过了,基于索引值也可以进行后退操作。所以相对来说,基于索引值的版本操作使用更加普遍。
非常清楚地我们可以看到我们又把版本前进到我们最新的记录上。
4、reset命令三个参数的区别
4.1、–soft
仅仅在本地库移动HEAD指针,也就是并不会改变暂存区和工作区的内容。
我们首先新增一行Hello Git,然后提交到缓存区,并不提交到本地库。
- 本地库
- 缓存区
- 工作区
我们可以发现变化只发生在本地库上,缓存区和工作区没有发生变化。
对于出现绿色的提示信息,是因为本地库相对而言向后退了,也就相当于缓存区向前进了一步,看起来就像缓存区里面的内容发生了修改,所以会有提示信息。实则并没有发生修改。
![](https://i-blog.csdnimg.cn/blog_migrate/d8f8f0b996105bbc26269272920b2718.png)
4.2、–mixed
在本地库移动HEAD指针,重置缓存区,并不会改变工作区的内容。
- 缓存区
- 工作区
缓存区内出现警告,同 soft 中的产生原因相同,由于本地库和缓存区都向后退了一步,也就导致了工作区的内容相对来说,向前进了一步,所以就会出现红色字体。假设缓存区不发生变化的话,就会变成绿色字体。所以暂存区里面的内容发生了重置。
![](https://i-blog.csdnimg.cn/blog_migrate/9335f7980e651fd4b5ce93a38c43cf11.png)
4.3、–hard
在本地库移动HEAD指针,重置缓存区和工作区。
- 缓存区
- 工作区
可以发现缓存区和工作区没有提示任何信息,也就是说工作区和缓存区里面的内容时空的,也就是被重置了,Hello Git 的内容也被删除。
![](https://i-blog.csdnimg.cn/blog_migrate/b3b12d85728cf85bf547c5c2379f5ef9.png)