git reset与git revert比较
2016-04-11 15:30
267 查看
git reset
git reset的作用是还原Index的状态或修改本地分支HEAD的位置。这个命令适合用于从某个提交点重新开新的分支。比如,如果某个提交之后的代码我们都不要了,就可以在本地reset至指定commit,然后开一个新的branch继续新的开发(原来分支在远程上没有发生任何变化的)。使用git reset是不影响远程分支的,一切都在本地发生。如果回退需要很快影响远程分支的,应该使用git revert。
git revert
假如某些旧提交我们不想要了,而又不愿通过自己修改代码重新提交的方式来完成,这个时候我们就可以把这项工作交给revert命令。Git Revert原理:根据你要回退的提交所做的改动做相反的改动,然后重新提交代码,使代码达到没有这些旧提交所能达到的状态。
如果对于git revert的回退策略还没理解,这样讲也许你就能理解了:回退旧的提交必然会导致当前最新代码发生变化,比如之前某个提交加了一行代码,那么回退就是在相同位置减一行代码。Git不会真的把旧提交抛弃,如果直接抛弃,历史记录就追踪不到了。因此,旧提交其实是没动的,Git只是根据旧提交反着做了一遍,这才导致最新的代码发生了改变。只有把revert命令回退导致的改动重新提交,revert命令才算真的完成并生效,否则效果只相当于修改了工作树的文件而已。
注意:revert之后需要push到远程分支上其他用户才能看到回退发生的改动。
使用git revert会出现的问题
因为git revert是用新提交覆盖旧提交,因此,被覆盖的提交等于不会被采用了。如果两个分支(假设是master和A分支)先合并再用revert回滚,之后又合并(A合并到master),就会发现在master分支上,A分支第一次合并之前的修改大部分不见了。这是因为从时间的发生顺序来看,A分支第一次合并之前的修改发生在revert之前,revert发生在后,而 revert抛弃了A第一合并之前的修改,那么再合并Git就认为你永远抛弃了A第一次之前的修改。要解决这个问题,需要把revert产生的提交再revert一次。
相关文章推荐
- RPC failed; result=22, HTTP code = 411
- git更新已經刪除的文件
- 提取Git每次提交后Commit的文件
- GIT迁移服务器
- Spring Boot 开发微服务
- 分布式版本管理git入门指南使用资料汇总及文章推荐
- git终极指南:在实际开发中的应用
- 重置默认样式 css reset第1/2页
- 表单项的name命名为submit、reset引起的问题
- 对于Form表单reset方法的新认识
- Git远程操作详解
- 25个 Git 进阶技巧(翻译)
- 详解版本控制利器Git,SVN的异同以及适用范围
- php中current、next与reset函数用法实例
- Ruby实现的删除已经合并的git分支脚本分享
- 在 Shell 提示符中显示 Git 分支名称的方法
- Git使用基础篇(一些常用命令和原理)
- git fork同步是什么意思?
- Git使用小坑 Out of memory错误的解决方法
- Python的高级Git库 Gittle