git reset和git revert的区别
1、git reset 的缺点分析
有时候,我们commit提交代码后,发现这一次commit的内容是有错误的,此时可以使用reset重置仓库。但是,执行reset命令之后会删除commit以后的所有的提交。在公共分支上我们commit了自己的内容,别人也提交了commit,如果使用reset命令将会影响到他人的提交,此时可以考虑使用git revert命令。
备注:关于reset的详细介绍,可以查阅这篇文章《git reset 命令详细介绍》。
2、git revert 命令介绍
git revert 是撤销其中的commit,然后重新生成一个commit。它本身不会对其他的人提交commit产生影响,其基本用法为:
git revert <commit>
使用 git revert <commit>
可以撤销指定的提交, 要撤销一串提交可以用 <commit1>..<commit2>
语法。 注意这是一个前开后闭区间,即不包括 commit1,但包括 commit2。
git revert 默认会自动提交commit,可以使用参数:-n 或者 --no-commit,不进行自动提交,如下所示:
git revert -n <commit>
git revert --no-commit <commit>
如果为默认提交,则执行revert指令后会弹出编辑器用于编辑提交信息,这时候应该标注revert的原因。通常情况下,我们不进行自动提交,使用no-commit选项有利于连续撤销多个提交,最后统一进行提交。
3、git revert 底层原理分析
Git把数据看作是对小型文件系统的一系列快照。在Git中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照。立足于当下,我们看到的是一系列快照叠加之后的内容,使用revert可以删除某个快照,从而实现撤销的功能。
参考:
《Git入门教程》。这是一个不错的入门教程,值得分享给大家。这个教程参考Git官方文档以及网上众多Git技术博客而成,从浅入深,分析透彻,值得Git初学者和Git中级用户学习和参考。