前言

在此之前,建立一个约定。
commit会产生提交id,merge之后也会产生提交id。也就是说merge是commit的一种操作。
但是为了表达方便,我们将commit和merge统称为更新,commit只是单指当前分支的提交,而merge单指合并操作。

正文

首先明确下问题:

  • 回滚
    将当前的version重置到某次提或者合并,在此次提交或者合并之后的更新都会被丢弃。
    比如 git reset --hard
  • 取消commit
    将某次commit的更新取消,但是这次commit的前后更新都不受影响。
    比如 git revert commit_id
  • 取消merge
    将某次merge取消,但是其前后的更新都不受影响。
    比如 git revert commit_id~number
    number是这次merge的提交。
    eg:
    git log
    在这里插入图片描述
    • git revert fe6368d8b7c4e73137865b2f7de944aac8f508d6~2
      那么这次fe6368d8b7c4e73137865b2f7de944aac8f508d6对应的2次更新 8134271和4c63926都会被取消
    • git git revert fe6368d8b7c4e73137865b2f7de944aac8f508d6 -m 1
      只会取消8134271这次更新

据我所知,回滚其实用的很少,因为如果某次更新有问题,那么需要取消某次更新而不应该粗暴的回滚到那次更新之前(会操成误伤,抹去了别人的更新)。
所以推荐还是使用gir revert。

当然–soft 和–hard --mixed的区别可以如下理解:

  • soft
    只操作了HEAD,暂存区和work都没有被影响
  • hard
    操作了HEAD、暂存区和work,都被影响了
  • mixed
    操作了HEAD、暂存区,work没有被影响
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐