Git版本回退中的Git revert 和 Git reset 区别

Git revert 和 git reset 的区别

1. git reset 是把HEAD指针向后移动了一下,而git revert是HEAD指针继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容(如下图):

例子:同样是从C版本退回到B版本,git revert 和git reset --hard 的处理逻辑

Git revert commit_id 回退前(用git log --pretty=oneline查看的结果):HEAD 指针指向 版本C 也就是 版本3

Git revert commit_id 回退后 (用git log --pretty=oneline查看的结果):HEAD 指针指向 新版本(Revert "版本B") 也就是 版本4 ,之前的 版本3 被保留下来了


git reset --hard commit_id 回退前(用git log --pretty=oneline查看的结果):HEAD 指针指向  版本3

git reset --hard commit_id 回退后(用git log --pretty=oneline查看的结果): HEAD 指针指向 版本2,之前的 版本3 被干掉了 (虽然这里被干掉了,我们还是可以通过 git relog 的方式找到版本3的Commit_id,再通过 git reset --hard commit_id 的方式进行恢复)

2. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit


3. 在回滚这一操作上看,效果差不多。但是在日后继续合并(merge)以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。

你可能感兴趣的:(Git版本回退中的Git revert 和 Git reset 区别)