【Git】如何回退到指定版本

1,656 阅读2分钟

在项目开发过程中,有时候会出现错误提交的情况,此时需要撤回之前的提交,让代码仓库恢复到错误提交之前, 本文总结了两种可行的解决办法:resetrevert

git版本管理及HEAD理解

使用git进行版本管控时,git会把每次提交串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只存在一条时间线, 换句话说,只有一个分支,我们把这个分支称为主分支(master)。HEAD指针指向当前分支,比如master分支, 而master会指向最新的提交,每个版本都有自己的版本信息(如版本号、版本名等)。下图为只有主分支的情况:

HEAD

使用reset回退版本

原理git reset的作用是修改HEAD所指向的位置,即将HEAD指向需要回退版本的位置,如下图所示:

reset

适用场景: 如果回退到之前某个版本时,不考虑此版本后提交的修改,可以使用此方法进行版本回退。

操作方法

  1. 查看准备回退的版本号
git log
  1. 进行版本回退

HEAD相当与当前、HEAD~1 退回上一个版本、HEAD~2 退回上两个版本,依次类推。

git reset --hard HEAD~1

或者

git reset --hard (目标版本号)
  1. 再次查看提交记录,发现回退版本后的提交记录被覆盖了
git log
  1. 强制推到远程仓库
git push -f

使用revert回退版本

原理git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如, 我们commit了三个版本(版本一、版本二、 版本三、版本四),突然发现版本二存在bug,需要撤销版本二, 但又不想影响版本三、版本四的提交,就可以用 git revert 命令来反做版本二,生成新的版本五,版本五里会保留版本三、版本四的东西, 且只撤销了版本二的修改。如下图所示:

revert

适用场景:如果只想撤销以前的某个版本,但需要保留回退版本后的修改,可以使用这种方法。

操作方法

  1. 查看准备回退的版本号
git log
  1. 执行回退命令
git revert -n (目标版本号)

如果出现冲突,需要手动去修改冲突文件。

  1. 然后按正常流程提交,会生成一个新的版本,不会影响到以前的版本
git commit -m 'revert xxx'

git push

参考文章