1、已修改未追踪的文件的撤销
我们在git学习(一)为项目创建git仓库的基础上进行操作,在README.md中随便写点内容
查看状态
git status
此时我们可以通过以下命令撤回此次修改
git restore README.md
可以发现文件的内容又为空了,也就是修改前的内容
2、撤回已追踪的文件
首先修改README.md的内容 通过git add 命令追踪
git add README.md
撤销追踪的话,即从暂存区去除,可以通过以下命令实现
git restore --staged README.md
3、撤回commit
我们先把修改后的README.md文件提交到本地仓库
那么有两种方式可以对commit进行回滚,分别是
- git reset
- git revert
git reset
git reset是将commit 回滚到之前某个版本,将已经commit的文件变为未追踪状态(新添加的文件)、或修改待暂存状态(之前就有的文件,但是后面修改了)
通过如下命令,可以回到上一个版本的状态
git reset HEAD^
git status
可以发现README.md撤回到了已修改未追踪的状态,也就是待用git add 操作加入暂存区的状态
如果要撤销该文件的内容修改,可以看文本章的第一点,如需提交,就git add添加,然后git commit即可
那么为了接下来演示git revert,我们选择commit
git revert
首先,我们在touch一个文件a,然后commit
我们通过git revert命令,反做上上次一次commit,也就是 修改README.md的commit
git revert HEAD^
此时去查看README.md的内容,发现消失了,也就是说git revert 命令是将之前某一次的commit取消掉,但是不影响取消的commit前后的commit
而git reset是将此次commit后的文件都变为待git add状态
reset 和 revert区别
- 如图所示,revert的话是将制定的版本的操作进行一次反向操作,生成新的提交,这个反做的操作是可以看到的,而reset的话是直接回推到指定的版本
- reset的话,是回退到之前的版本,那么是无法push到远程仓库的,因为远程仓库的版本比回退后的版本新,而revert是重做某次commit,所以操作后的版本大于远程仓库的版本,是可以push的