git 撤销篇之 revert 与 reset

发布日期 目录 Git

git 撤销篇之 revert 与 reset

场景:我们在本地执行了git commit 之后,突然又不想提交了,想撤销回来。

解决:有两种方案:1、revert命令;2、reset命令

接下来说下这二者的用法。

在说用法之前先说下这二者的区别,对这两个命令有个概念:
revert 命令,是生成一个新的提交来覆盖要撤销的提交,会保留提交记录,使的代码看起来像是还原了。
reset 命令,是直接删除掉要撤销的提交,是删除提交记录。


REVERT 命令用法

对于与REVERT撤销,我觉的还不如叫覆盖还原,因为它新增了一次提交,HEAD指针向前移动了一次,所以我定义为:覆盖还原某一次提交内容,但是要还原的某次提交以后的提交不会收影响(修改同一处除外,这相当于本次还原提交与之后的提交有冲突)。

revert的使用命令一般有:

// 撤销前一次 commit
git revert HEAD

// 撤销前前一次 commit
git revert HEAD^

// 撤销指定的版本
git revert <commitId>

RESET 命令

上面说了 revert 命令会创建一条新的提交,HEAD指针会向前移动。而reset命令不一样,它会使HEAD指针向后移动从而丢弃某段提交(注意是丢弃某段提交),我定义为:还原提交记录至某次提交记录,会删除提交记录。

命令方法:

// 会将提交记录回滚至某次<commitId>,这次<commitId>之后提交的代码还在,只是作为未暂存文件
git reset <commitId>

// 与上面的区别是:这次<commitId>之后提交的代码都没有了,也就是一块删除了
git reset --hard <commitId>

注意:reset命令不是撤销某次提交,是撤销某一段提交,上面的不在撤销对象里面,它是HEAD指针指向的提交来作为最新的提交。

下图我们提交了几次:

我们将代码撤销到第一次提交的时候,也就是我们把第二次与第三次提交都撤销回来,但是第二次与第三次代码还需要留着,执行命令:

第二次与第三次的提交的代码会视为修改的代码,置为未暂存状态

看完上面应该可以明白revert与reset命令了。

发表评论

邮箱地址不会被公开。