1. 概述
Git回退操作指的是撤销之前的提交,让代码库回到指定的状态,也就是说回到之前的版本,这个过程是将Git仓库的HEAD指针回退到之前对应的版本。当执行了一个pull操作之后,如果发现之前的修改有问题,需要回退到之前的版本,那么就需要使用Git提供的回退操作来实现。
2. Git回退操作
2.1 git reset
Git提供了reset操作可以回退版本,reset操作一般有三种方式:mixed、soft、hard。
2.1.1 mixed模式
mixed模式是reset命令的默认模式,执行这个命令之后,不仅当前的HEAD指向了指定的commit,且暂存区里的内容也被全部清空,但是工作目录中的文件内容不会被修改,因此需要手动对工作目录中的文件重新修改和提交。
// 回退到上一个版本
$ git reset HEAD^
注意:
这个命令只会将仓库回退到之前的版本,如果此时希望将工作目录的内容也回退到之前的版本,就需要使用git checkout命令。具体的操作流程如下:
$ git reset HEAD^ // 回退仓库版本到上一个版本
$ git checkout . // 将原来版本的内容覆盖到当前的工作目录
2.1.2 soft模式
soft模式也会将仓库回退到指定的版本,但是暂存区和工作目录中的文件都不会被修改,因此,执行完这个操作之后,之前的修改全部都被还原,可以直接再次提交。
// 回退到上一个版本
$ git reset --soft HEAD^
2.1.3 hard模式
hard模式会将仓库回退到指定的版本,并且暂存区和工作目录中的文件都会被修改,被修改的文件将变成指定版本中的内容。
// 回退到上一个版本
$ git reset --hard HEAD^
2.2 git revert
git revert可以将某一个提交取消掉,并创建一个新的提交。与reset不同的是,revert不会撤销之前的提交,而是会将之前的修改还原,然后再次提交一个新的修改,因此它不会改变提交历史。
// 撤销上一个提交
$ git revert HEAD
注意:
由于revert是会将之前的修改还原,然后再次提交一个新的修改,所以如果当前代码库的状态和之前的版本相差比较大,很有可能在撤销之前的提交时发生冲突。此时需要手动解决代码冲突之后再提交。
3. Git回退pull操作
当执行完pull操作之后,如果发现回退到之前的版本,可以使用reset操作,一般需要使用hard模式来回退版本。回退到之前的版本之后,如果需要将工作目录中的代码还原到之前的状态,使用如下命令:
// 恢复到之前的版本
$ git reset --hard HEAD@{1}
// 将工作目录还原
$ git checkout .
4. 小结
在Git中,回退操作是非常常见的操作,可以使用git reset和git revert命令来实现。如果想回退到之前的版本,一般可以使用reset命令,而如果想撤销之前的提交并且保留提交历史,可以使用revert操作。在执行回退操作的时候需要注意,回退到之前的版本之后,需要手动将工作目录还原到之前的状态。