git回退 git revert 和 git reset 用法

用法

git reset

用于回退版本,可以指定退回某一次提交的版本。直接删除指定的 commit 之后的记录。

命令语法格式如下:

git reset [--soft | --mixed | --hard] [HEAD]
  • --mixed 为默认,可以不用带该参数,不删除工作空间改动代码,撤销 commit,并且撤销 git add
  • --soft 不删除工作空间改动代码,撤销 commit,不撤销 git add
  • --hard 删除工作空间改动代码,撤销 commit,撤销 git add

git revert

用于重做(回滚)指定某一次提交的版本。不会删除 commit 和 history ,且会把这次操作作为一次最新的提交。

命令语法格式如下:

git revert [<options>] <commit-ish>

区别

  1. git revert 是用一次新的 commit 来回滚(重做)之前的 commit ,git reset 是直接删除指定的 commit。
  2. 在回滚操作上看,效果差不多。但是在以后继续合并以前的老版本时有区别。 git revert 是用一次逆向的 commit (重做)之前的提交,因此以后合并老的分支时,会导致这部分改变不会再次出现,但是 git reset 是直接把某些 commit 在某个分支上删除,因而和老的分支再次合并时,这些被回滚的 commit 还会被引入。

场景

  1. 小明在分支 dev1 上开发,提交了 3 次(分别为 c1、c2、c3),发布时需要把 dev1 分支合并到 master 分支上,生成记录 m2,并发布到线上。
  2. 小王在分支 dev2 上开发,提交了 1 次(c1),然后也把 dev2 分支合并到 master 分支上,生成记录m3,并发布到线上。
  3. 不幸的是,小名的 dev1 分支上存在 bug,需要回滚 dev1 上的所有提交。

git回退 git revert 和 git reset 用法_第1张图片

解决

使用 git reset 会将 M1 之后的提交都回退掉, 也就是 M2 和 M3 都会消失,这不符合现在的场景,
所有推荐使用 git revert.
git revert 会生成 M4,M4 上面就没有 dev1 的提交了。
git回退 git revert 和 git reset 用法_第2张图片
注意
当 dev1 分支的 bug 修改完成后,在合并到 master 时,之前被重做的内容是不会出现的,也就是 C1、C2、C3 的改变不会再出现,需要再次 revert 掉 M4,生成 M5 后再进行合并。
git回退 git revert 和 git reset 用法_第3张图片

你可能感兴趣的:(git,git)