git revert 回退版本以及 git resert 与 git resert的区别

背景

最近有个需求,来来会回折腾,前端开发完毕,但后端涉及到的RD太多,交接太麻烦,一个部门的RD对需求开发不理解,导致对接的RD这边有需求有误解,有时候严重需要回退当前需求的分支还原开发前的状态,但是在开发时,公共分支受不同人控制,不能回退自己分支时让其他同事的需求代码受到影响。

解决办法

git revert

如下:
我们需要将test环境的分支的制定commit去除,但是不影响其他commit的提交顺序

step1 找到需要回退的commit

IMAGE

如上图,因为这两个commit包含一个merge,这里我们只revert倒数2,3两个commit,

step2 回退

IMAGE

step3 提交

IMAGE

step4 查看最新log

IMAGE

可以看到最新占位的commit已经被revert。

确认

如果想要查看自己revert的代码是否自己真正想要回退的,可以diff自己已经revert的commit,如下:
IMAGE
IMAGE

注意

  • git reset
    git reset 也可以实现版本的回退,具体操作不做详细讲解,步骤可以发在下面

    1
    2
    3
    git log
    git reset --hard [commitID]
    git push -f origin [分支名]
  • git reset 与 git revert 的区别
    1) git revert用一次新的commit来回滚之前的commit, git reset 直接删除之前的commit
    2)在回滚这一操作上来看,效果都差不多。但是日后继续merge 之前的老版本时有区别。因为git resert 是用一次逆向的commit “中和”之前的提交,因此日后合并老的分支时,导致这部分改变不会再出现,但是git reset 是之间的某个commit在某个分支上删除,因而当该分支再去和老的分支时,这些被回滚的commit还会被再次引入。
    3) git reset 是把head向后移动了一下,而git resert 是把head继续向前推进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。