Git reset 与Git revert 的区别和作用

当我们在具体的开发过程当中,有些时候需要我们回到过去开发的版本状态,这个时间就需要用到回退的命令。即git reset 和git revert 。

git reset 将处于Commit区的提交重置

Git分为三个区:
工作区(Working Directory):没有修改、修改后未使用git add的文件
暂存区(Staged):新增/修改后的文件调用git add后都会被添加到暂存区
提交区(Commit):所有添加到暂存区里的文件通过git commit之后会被统一添加到提交区,作为一次提交


示意图

git reset --mixed xxx ,
git reset --soft xxx,
git reset --hard xxx

Git reset --mixed HEAD^ 将Commit区和Add暂存区都回退回去制定版本号

例如我们当前本地版本是版本3,而且已经提交到了Commit区,现在由于某些原因,我们提交到版本错了,想取消这次版本提交,这个时候就可以用 git reset --mixe HEAD ,提交以后,我们就会回到提交之前到状态,Add暂存区和Commit区都会回退到上次保存到版本2状态。


示意图

其中要注意到是"git reset --mixed HEAD" 中的"HEAD" 必须是大写。HEAD指针指向的是最新的提交节点。而HEAD^代表的是前一次的提交节点。而“HEAD2”代表的是前两次的提交节点。HEAD20代表的是前两十次的提交节点。

回退之前的版本


回退之前的版本

回退之后的版本


回退之后的版本

Git reset --soft xxx 将已经提交到Commit区的提交节点退回到Add暂存区

当我们把版本提交到Commit区以后,却发现之前输入到声明有误,需要修改,这个时候我们就可以用Git reset --soft HEAD^ 命令,然后重新提交声明,然后push到远程仓库。


示意图
修改之前

修改之后

Git reset --hard HEAD^ 将最近一次提交节点的提交记录全部清除

如果此时发现修复一个BUG完全错了,希望取消这次提交,并且把代码回退到没有改动的话,则需要使用git reset --hard HEAD^,来将这次提交全部回退。即这个命令也会将本地的修改文件删除。


示意图
修改后

方法二:Git revert

原理: git revert的作用是创建一个新的版本,这个版本的内容与我们要回退到的目标版本一样,但是HEAD指针是指向这个新生成的版本,而不是目标版本。例如,假设我们要回退到版本二,版本四的内容和版本二是一样的:


作用之前

具体步骤

  • git revert HEAD 撤销前一次 commit
  • git revert HEAD^ 撤销前前一次 commit
  • git revert commit fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff(撤销指定的版本,撤销也会作为一次提交进行保存。)


    修改以后

Git reset 与 Git revert同样是回到过去版本指针的命令,但是使用场景却不一样,其最大的区别在于使用Git reset回到以前版本的命令,都是使其目标版本以后的版本完全删除覆盖,而Git revert则不会删除任何版本,只会形成新的版本,如果再想用其他版本,也可以随时修改使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。