git 回滚、取消commit、取消merge等回退操作
·
前言
在此之前,建立一个约定。
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这次更新
- git revert fe6368d8b7c4e73137865b2f7de944aac8f508d6~2
据我所知,回滚其实用的很少,因为如果某次更新有问题,那么需要取消某次更新而不应该粗暴的回滚到那次更新之前(会操成误伤,抹去了别人的更新)。
所以推荐还是使用gir revert。
当然–soft 和–hard --mixed的区别可以如下理解:
- soft
只操作了HEAD,暂存区和work都没有被影响 - hard
操作了HEAD、暂存区和work,都被影响了 - mixed
操作了HEAD、暂存区,work没有被影响
更多推荐
已为社区贡献1条内容
所有评论(0)