在开发过程中,有些时候会出现一些错误的提交,这个时候可以用 git revert
命令把这些错误的提交给回滚了。
介绍
git revert
命令用来将指定的 commit
回滚。
回滚原理是通过新建一个指定的提交的反操作的提交。
下面以上面的例子介绍 revert
的使用,假设当前的分支状态如下图所示:
featureA - featureB - featureC - featureD |
想要在主分支应用 featureC
特性,可以进行如下的操作:
$ git revert featureC |
现在的分支状态变成了下面的结构:
featureA - featureB - featureC - featureD - revertedFeatureC |
示例
结合一个示例来看上面的过程,下面是一个已经准备好的分支:
$ git log --oneline |
首先来查看 featureC
做了哪些改动:
$ git show 7eb26bc |
从上面可以看出来 featureC
增加了 featureC.md
文件,此时尝试 revert featureC
:
$ git revert 7eb26bc |
可以看出多了一个新的提交 a8be289: Revert "featureC"
,来看一下这个提交做了什么事情:
$ git show a8be289 |
可以看出来,这个提交的内容刚好是和 featureC
相反,删了了 featureC.md
文件。
下面详细来看一下 git revert
的各种命令:
使用
语法:
git revert ..
可以 revert
一个或多个提交。
git revert commitHashA..commitHashB
可以 revert 从 commitHashA
到 commitHashB
之间的所有提交,其中不包含 commitHashA
,包含 commitHashB
。
git revert commitHashA^..commitHashB
同上面类似,区别在于包含 commitHashA
的提交:
几个有用的参数
-e 或 –edit
允许你在 revert
之前编辑提交消息。
-m 或 –mainline
如果提交的是一个合并分支的提交,这个操作会失败,因为 revert
不知道选择那边的改动。
这个参数的作用就是告诉 revert
采用哪边的改动,通常不建议 revert
合并分支的提交。
-n 或 –no-commit
只应用 revert
的内容变更,但不会产生新的提交,即需要自己手动进行 git commit
的过程。
冲突处理
git revert (--continue | --skip | --abort | --quit) |
在 revert
过程中,有时候会有代码的冲突,这时 revert 的操作会暂停,可以选择如下操作:
git revert –continue
在解决冲突后,可以使用 git revert --continue
继续后面的 revert 过程。
git revert –skip
跳过当前的 commit
,继续后续的 revert 过程。
git revert –abort
放弃 revert,回到 revert 之前的状态。
git revert –quit
停止 revert,不回到 revert 之前的状态,保留现状。