对于git版本的回退,我们一般会用到如下两个命令:
- git reset
- git revert
这两个命令有什么区别呢?
1、git reset
假设有如下几个提交:

执行如下命令
1 | git reset --hard a0fvf8 |
命令执行之后,HEAD指针就会移动到B提交下

此时,远程仓库的指针依然在D提交上。直接push的话,无法将更改推送到远程仓库,只能使用-f强推到远程仓库:
1 | git push -f |
这个方法的弊端显而易见,之前的C、D提交将会被抹除,无法再找回了。
2、git revert
通过反做创建一个新的版本,新版本的内容与要回退的目标版本一样,而HEAD指针指向新生成的版本。
用git revert 来实现上述例子的话可以先revert D,再revert C(由新到旧依次revert)
1 | git revert 5lk4er |

如果回退的数量较大,一个个回退容易出错,可以使用以下方法进行批量回退
1 | git revert OLDER_COMMIT^..NEWER_COMMIT |
这样操作的话HEAD指针是往后移动的,可以直接push到远程仓库中。将来甩锅便有迹可循