06 | 代码回滚,你真的理解吗?
该思维导图由 AI 生成,仅供参考
什么是代码回滚?
你是不是也遇到了问题?
- 深入了解
- 翻译
- 解释
- 总结
代码回滚是软件开发中常见的操作,涉及到从当前版本回滚到以前稳定版本的情况。在日常代码管理中,开发人员可能会遇到各种代码回滚的问题,包括个人分支回滚、集成分支上线前后的回滚等。在进行代码回滚时,需要遵循一些原则,比如不使用 reset --hard 的方式进行集成分支上的代码回滚,以避免可能导致不需要的功能再次被引入到集成分支。此外,文章还介绍了哪些情况下需要回滚代码,以及包的回滚无需回滚代码的情况。总的来说,代码回滚是一个重要的技术操作,需要根据具体情况采取合适的方式进行回滚,以确保代码的稳定性和质量。 文章还介绍了三种典型的代码回滚场景及相应的处理策略,包括个人分支回滚、集成分支上线前回滚和集成分支上线后回滚。对于每种场景,都提供了详细的处理步骤和示意图,帮助读者理解如何在实际情况中进行代码回滚操作。此外,文章还提到了一些思考题,引导读者深入思考代码回滚过程中可能遇到的问题,促进对代码管理的深入理解。 总的来说,本文通过具体的场景案例和详细的操作步骤,帮助读者全面了解了代码回滚的概念、原则和实际操作,对于需要进行代码回滚的开发人员具有实际指导意义。
《持续交付 36 讲》,新⼈⾸单¥59
全部留言(17)
- 最新
- 精选
- 孙文正置顶希望每篇的下面分享一些具体实施的文章。 比如gitlab的ci流程具体的部署等等。
作者回复: 这些都会在最后的一节中介绍,但是这些其实gitlab的doc都挺清楚的,我还是力求将一些大家不一定了解但却有用的东西
2018-08-21 - 大M置顶第一个通过reset-hard和reset -soft 可以实现,下面两个求指教。
作者回复: 设计这个问题,一来请大家注意“集成分支的回滚”,不能用reset --hard的方式来清除不要的代码,而该使用revert;二来鼓励大家通过实践与思考,真正地掌握revert命令,以便高效解决各类代码回滚的问题。 通过gitlab UI界面,我们只能回滚单个commit,而用git revert命令,可以一次性回滚连续的或间隔的几个commit,其次,如果遇到merge产生的合并commit,必须使用 -m 参数才能回滚,因为要确认正确的父节点 这里还引申出的一个问题是,如果通过UI回滚单个commit不能满足回滚要求的话,建议开发在本地利用revert灵活的方式完成代码回滚,本地测试没问题,再push到远端,然后发回滚的Merge Request。
2018-07-173 - zhchnchn有个问题请教,在集成分支上线后回滚的操作步骤中,$ git reset --soft origin/master # --soft 使得本地的 master 分支的指针重新回到 V05javascript:;30,而暂存区 (index) 变成 V0529 的内容。这部操作有什么意义吗?文中后面不是说“如果要修复问题,可以在开发分支中先revert掉 C3',这样被清除的几个commit的内容又恢复了”吗?
作者回复: 我们说上线后不得已才会回滚集成分支的代码(短时间不能修复A功能代码的问题,而B功能又急着要上线)。 上述操作,我们把集成分支回到正确的地方,并且在集成分支上通过新增一个commit的方式,其意义有4个: 让团队其他成员新拉取的代码都没有问题;让曾经拉取了问题代码的分支merge回集成分支的时候,也不会再次把问题带进来;不会影响其他紧急上线的功能;负责修复问题的开发人员,只需再执行revert就能取到需要修复的代码。
2018-07-2426 - 致远老师,在我理解,集成代码上线前和上线后的回滚原理是一样的,为何还要区分出来呢?
作者回复: 上线前可以通过revert直接处理,纬度是commit;但是上线后,部署包已经存在,你必须考虑与它的对应关系。举个例子,有3个commit,1、2、3上线前你可以回滚1、3,保留2;但上线后,3个commit都要回滚,特别是如果做了自动化代码回滚,这条原则就很重要
2018-07-292 - 白天不懂爷的黑第二个问题是不是拥有master权限的小伙伴直接在网页上修改的啊,😄。第三个问题,应该也可以不用提交commit,我们这是每build一次代码就备份一次当前构建的包,回滚的话列出最近10次备份的包,然后回滚对应的备份。 老师,我这最近回滚有点问题,比如说,代码发布了三次,然后都上线失败了,备份的三次包也是有问题的,然后测试不知道哪一个版本是最近正确的版本,导致到处问,这个有什么好办法吗?
作者回复: gitlab高版本对保护分支做了更加精细的权限控制,允许角色或个人(不一定是master)对保护分支做merge和push。这道题主要让大家回顾一下集成分支代码revert的做法,不是删除不要的commit,而是新建一个commit,如果revert的时候不勾选发起merge request,那么这个revert产生的commt就只有一个parent。 发布包本身也是一条路径线,也需要被记录,建议发布包本身带一个比较容易辨识的版本号,commitid作为属性记录在发布包上,这样整个发布包历史也可以很好管理
2018-07-1721 - 橙子commit粒度怎么控制才好,开发分支针对一个文件修改就有一个commit吗?还是一个功能点commit会比较好?
作者回复: 没有特别的控制约束,最终是以merge request为单位,多个commit的集合,一个mr基本上就是一个功能
2018-07-25 - 还在想,还念老师可不可以先讲下分支策略流程 实践中基本的分支策略 master feature uat 等而不是一开始直接讲代码回滚 作为一个测试工程师表示很困惑
作者回复: 分支策略可以看一下第4讲的内容
2018-07-18 - 在路上对于特定分支代码 commit 回滚使用 git debate -i 这种是不是更好操作一些。2020-04-071
- 天天向上我有个疑问哈,如果在集成分支上对某个特性分支request进行了revert后。那我之后这个特性分支改完后,再向集成分支进行merge,那么之前revert掉的就无法再合并了呀?2019-12-0111
- tanatang问题一:1、创建一个新分支,测试仅回滚3个commit后,是否正常可用。2、将新分支merge回集成分。 问题二:特性分支合并回master之后,出了合并的commit外,原本特性分支更新过程中的commit也同步到了master中。 问题三:需要,原因就类似于文中的 集成分支不要回滚,而是弄新的commit一样。2023-04-06归属地:四川