相关视频教程:Git reset三种常用模式区别和用法_哔哩哔哩_bilibili
测试准备
能实现版本回退有很多种方法,本章基于git reset模拟测试,最后会再补充git revert命令
- 创建一个空仓库
- 本地克隆
- 本地创建资源
git reset测试
git reset适合用于个人开发项目,或者某个单人维护的分支
HEAD就是最近一次本地commit提交的版本,也叫最新快照
git reset不同的维度有不同的作用
文件维度
将工作区两个文件add到暂存区
突然想撤回暂存区的A.txt
提交维度
将HEAD和当前分支的指向移动到某一次提交
有4中写法:
git reset <commit-id>
git reset <brand-name>
git reset <tag-name>
git reset HEAD~<n>
前三种 我不用,这里只讲最后一种
- git reset HEAD~<n>
据说这个是最常用的
如图,n为2,则从HEAD开始包括HEAD,最新的2次提交记录会被丢弃,从提交历史中移除
git reset命令有三种模式
无论哪一种模式:对HEAD的改动完全一致,但是对暂存区和工作区的改动有区别
soft模式
注意
HEAD丢弃了最新快照,暂存区和工作区并没有变化,所以可以commit再还原
仔细看,git reset会删除版本记录,所以不要在公共分支使用,公共分支可以换成git revert,下面我会写
mixed模式
与soft模式只有一点区别,就是暂存区也被回退了,而工作区还是不受影响
hard模式(慎用)
这个更牛,工作区也给改了,别用,好吧,千万别用!!1
注意点
git revert命令
公共分支上,还是用这个好,别用git reset,git reset会消除版本记录,版本记录用git --oneline查看
git revert不会消除版本记录,而是会创建一个新的提交,去实现回退功能
- 衔接上文,先给A,B文件push到远程仓库
- 查看要回退的版本记录hash值
- 开始回退