当我们在具体的开发过程当中,有些时候需要我们回到过去开发的版本状态,这个时间就需要用到回退的命令。即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则不会删除任何版本,只会形成新的版本,如果再想用其他版本,也可以随时修改使用。