1. 查看提交历史
查看git提交历史一般常用两个命令:
# 查看历史提交记录
git log   
# 以列表形式查看指定文件的历史记录
git blame <文件名>
git log
该命令会按照我们提交的时间线,然后列出所有的历史提交。
示例:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x018iJol-1670132301876)(../picture/image-20221203221619650.png)]](https://img-blog.csdnimg.cn/4bc7b44fb4b7422fada3e1cc345b4f87.png)
git log 显示的提交历史信息,一般包含下面4条信息:

但是, git log 命令还有很多选项参数供我们选择,以便我们控制输出提交信息的形式。
- 比如我们想查看比较简短的提交信息,可以使用 --oneline 参数,git log --oneline
- 比如我们查看指定作者的提交信息,git log --author=用户名
下表列出了 git log 命令的常用选项参数及作用:
| 参数 | 作用 | 
|---|---|
| -p | 按补丁格式显示每个更新之间的差异 | 
| –-stat | 显示每次更新的文件修改统计信息 | 
| –-shortstat | 只显示 --stat 中最后的行数修改添加移除统计 | 
| –-name-only | 仅在提交信息后显示已修改的文件清单 | 
| –-name-status | 显示新增、修改、删除的文件清单 | 
| –-abbrev-commit | 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符 | 
| –-relative-date | 使用较短的相对时间显示(比如,“2 weeks ago”) | 
| –-graph | 显示 ASCII 图形表示的分支合并历史 | 
| –-pretty | 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式) | 
| -(n) | 仅显示最近的 n 条提交 | 
| –-since, --after | 仅显示指定时间之后的提交 | 
| –-until, --before | 仅显示指定时间之前的提交 | 
| –-author | 仅显示指定作者相关的提交 | 
| –-committer | 仅显示指定提交者相关的提交 | 
详细解释可参考下面这篇文章的解释:
https://blog.csdn.net/jjlovefj/article/details/86476925
示例:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kvjA0nzT-1670132301877)(../picture/image-20221203223842427.png)]](https://img-blog.csdnimg.cn/27e9085c06124bce85f405d92bfd38ea.png)
git blame
如果要查看指定文件的修改记录可以使用 git blame 命令,命令格式如下:
git blame <file>
示例:

2. 版本的前进和回退
Git版本前进回退的本质是移动HEAD指针。HEAD指针,默认情况下都会指向最新的一次commit(提交)。HEAD和commit的大概关系图如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2JMJB3OF-1670132301877)(../picture/image-20221203233059324.png)]](https://img-blog.csdnimg.cn/3705c5d5b98d402f834fa8f349ca2d05.png)
版本的前进或者回退使用 git reset 命令,这样可以指定退回某一次提交的版本。
git reset 命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
其中,–soft | --mixed | --hard 分别是3个参数。
HEAD 参数说明:
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD^^^ 上上上一个版本
- 以此类推…
可以使用 ~数字表示
- HEAD~0 表示当前版本
- HEAD~1 上一个版本
- HEAD^2 上上一个版本
- HEAD^3 上上上一个版本
- 以此类推…
2.1 git reset --mixed
–mixed 为默认参数,在执行命令时可以不用带该参数。该参数会移动HEAD指针和重置index(暂存)区,但是工作区的内容保持不变。
1、重置暂存区(就是取消刚刚添加到暂存区的内容)
先通过 git add 命令,把文件提交到暂存区。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QiweGoqD-1670132301878)(../picture/image-20221203234732628.png)]](https://img-blog.csdnimg.cn/f2d4ed85431b423d941f271645ceff99.png)
然后,执行 git reset --mixed 命令,可以把刚刚提交到暂存区的内容恢复,如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8B3UBMRD-1670132301878)(../picture/image-20221203235036606.png)]](https://img-blog.csdnimg.cn/4e26db7bf468428db343f185e9d0bb76.png)
该命令其实省略了 HEAD,整个完整的命令:
git reset --mixed HEAD
HEAD 其实就是当前版本的意思,该其实就是相当于取消了刚刚添加到缓存(暂存区)的内容。
2、暂存区回退到上一版本
git reset --mixed HEAD^            # 回退所有内容到上一个版本  
git reset --mixed HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本  
该命令相当于回退了本地仓库的内容到上一版本(就是恢复了最近一次commit的内容),但是该命令是不会改变工作区的文件的。
2.2 git reset --soft
–soft 参数仅仅只是移动了HEAD指针,暂存区和工作区的内容都不会被改变(相当于只是回退到未提交前的状态)。
git reset --soft HEAD^     # 回退到最近一次未提交前的状态
git reset --soft HEAD~3    # 回退到上上上一次未提交前的状态
示例:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J0N8yBmZ-1670132301878)(../picture/image-20221204003938306.png)]](https://img-blog.csdnimg.cn/27bcb11f40454319b8695a9fd31adb8f.png)
–soft 参数的应用场合一般是:比如我们前面一次commit提交之后,发现提交的说明信息写错了,我们想更改一下提交的说明信息,这个时候我们可以使用 --soft 参数,仅仅回退一下HEAD指针(该参数不会重置暂存区和工作区)。然后我们再次commit,写上正确的提交说明信息即可。
2.3 git reset --hard
–hard 该参数会移动本地库HEAD指针,而且还会重置暂存区和工作区。在使用中一定要谨慎使用。
git reset --hard HEAD^  			# 回退到上一个版本 
git reset --hard HEAD~3  			# 回退到上上上一个版本  
git reset –hard bae128  			# 回退到某个版本回退点之前的所有信息。 
git reset --hard origin/master      # 将本地的状态回退到和远程的一样
2.3.1 版本回退示例
1、先查看git当前状态和提交历史,以及查看 test.c 文件内容:

2、使用 git reset --hard HEAD^ 命令回退上一版本:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lRxTIaKx-1670132301879)(../picture/image-20221204113920223.png)]](https://img-blog.csdnimg.cn/a4f7d20d12224750a2127ef6643f1f66.png)
使用该命令后,回退到了上一版本了。最近一次commit是提交一个新建的 .gitignore 文件,现在查看提交历史,发现确实少了这一次的提交,而且我查看工作区目录,该文件已经被删除了。
3、再次回退一个版本,查看下 test.c 的内容是否被回退了:

这个时候,HEAD指针相当于已经指向了回退两次之前的commit了。
2.3.2 版本前进示例
上面我们回退了两个版本,而且 --hard 参数是可以更改我们工作区中的内容的。我们发现自己搞错了,不想回退,想恢复原来的版本咋办?
我们也可以通过 git reset --hard 命令恢复刚刚的版本回退(可以说是版本前进吧,反正就是移动HEAD指针)。
使用 HEAD参数的话只能实现版本后退的操作,所以版本的前进我们只能使用索引值来实现。
git reset --hard [HEAD]   # 只能实现版本的后退操作
git reset --hard [索引值]  # 使用索引值既可以实现版本后退,也可以实现版本前进
1、先使用 git log --oneline 命令查看每次提交的索引值。

当然,如果版本已经回退了,git log 命令就之后列出当前的commit。所以我们前面在版本回退之前,可以先把之前的git log信息保存,然后再进行版本回退。
或者也可以使用 git reflog 命令获取到commit的索引值,该命令可以查看到当前仓库所有的改变,如下:

2、使用上面图片的 f226d87 索引值,把版本前进到回退之前的版本。
git reset --hard f226d87
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bDh0MNSw-1670132301879)(../picture/image-20221204130845003.png)]](https://img-blog.csdnimg.cn/f3b2732a8b0e4835bb83c0c04f70ecd8.png)
2.4 总结
- –mixed 参数,移动HEAD指针,可修改暂存区的内容,但不会修改工作区中的文件。该参数是 reset 命令的默认参数,所以在执行该命令参数的时候可以不写。
- –soft 参数,该参数只是移动了HEAD的指针,不会影响暂存区和工作区的任何内容。
- –hard 参数,移动了HEAD指针,还会更改暂存区和工作区中的内容。
![[附源码]计算机毕业设计JAVA医疗预约系统](https://img-blog.csdnimg.cn/19dfad6a9869467d88027787d6645862.png)

![[附源码]计算机毕业设计基于springboot的连锁药店销售管理系统](https://img-blog.csdnimg.cn/47034db950d54b5388848d918dd245ec.png)











![[附源码]JAVA毕业设计昆明市人民医院血库管理系统(系统+LW)](https://img-blog.csdnimg.cn/6c812114fa074e019d762bb7696aff57.png)




