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应该还会被引入。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容