一、版本回退的概念
1、版本操作
- 我们在GIT中的每一次
git commit
操作就会提交一个历史版本 - 每一个历史版本都有一个唯一的hash值进行记录,这个哈希值也称为版本号。
- 每一个历史版本实际上就是我们对工作区中的内容修改的一次记录
- 因此,当我们想退回到某个修改时,只需要退回到某个版本即可
2、版本切换的实质
在GIT的版本管理中,有一个叫做HEAD
的标记,这个标记就是一个用来指向当前版本的指针,当我们进行版本回退或版本切换时,实际上是移动HEAD指针的位置。
3、版本切换后再次提交
版本回退或版本穿梭之后,可以在对应的版本上进行操作,及提交,提交后便会正常生成一次历史记录。
二、如何进行版本回退
1、查看版本号
在GIT中,通过HEAD指针指向不同的版本号来实现切换版本,我们要进行版本的切换,首先要知道要切换到的版本的版本号。
#查看详细历史记录,按提交时间倒叙排列,包含提交时间,提交作者,提交备注以及提交的hash值
git log
#格式化log形式,每条log只有一行,只包含完整的hash值 和 提交的备注
git log --pretty=oneline
#格式化log形式,每条log只有一行,只包含 短hash值 和 提交的备注
git log --oneline
#只展示最新的几条日志,-n 后面的数字,就表示要展示的条数
git log -n 3
#会展示历史提交的分支路线
git log --graph
# 注意参数可以结合使用
git log --oneline -n 3 #一行一行展示 + 只显示最近的3次提交记录
git log --oneline --graph #一行一行的展示 + 展示提交的路线
git reflog #展示短hash+HEAD{n}+提交备注,可以非常方便的进行历史版本的回退与任意版本的切换
git reflog -n 2 #表示只看最近的两次提交
git log --stat #可以查看历史提交的改动的文件
我们来观察一下这些命令的具体效果
1.1 git log
1.2git log --pretty=oneline
格式化log形式,每条log只有一行,只包含 短hash值 和 提交的备注
1.3 git log --oneline
格式化log形式,每条log只有一行,只包含 短hash值 和 提交的备注
1.4 git log -n 3
只展示最新的几条日志,-n 后面的数字,就表示要展示的条数
1.5 git log --graph
展示历史提交的分支路线
1.6 git log --oneline --graph
参数结合使用
一行一行的展示 + 展示提交的路线
1.7 git reflog
展示短hash+HEAD{n}+提交备注,可以非常方便的进行历史版本的回退与任意版本的切换
2、版本回退操作—通过git reset
这里在我总结完这部分之后,发现了一个很大的问题,git reset
尤其是带有 --hard
标记的reset
命令是一个危险用法,是GIT会真正地销毁数据的几个操作之一,不建议使用。
具体关于git reset
的操作可以参考:https://www.jianshu.com/p/5ea23529527b
2.1操作思路
- 使用
git log
或者git reflog
命令,获取到要回退或者切换的版本id - 使用
git reset --hard
命令回退/切换到某个历史版本 git reset --hard
命令会重置 本地仓库、暂存区和工作区,三者的状态保持一致
2.2 版本回退/切换的命令
- git reset --hard [索引值] : 可切换到任意版本[推荐使用这个方式]
- git reset --hard HEAD^ : 只能后退,一个 ^ 表示回退一个版本,两个^ 表示回退两个版本,依次类推
- git reset --hard HEAD~n :只能后退,n表示后退n个版本
2.2.1 git reset --hard HEAD^
一个 ^ 表示回退一个版本,两个表示回退两个版本
再切回到原版本
2.3 关于git reset
的使用事项
3、版本回退操作—通过git checkout
3.1 回退到某一节点
git checkout 版本号
3.2 回退到某一节点的某一文件
git checkout 版本号 文件名
3.3 回退 本地修改未提交(git add
)的文件
git checkout 文件名