持续交付 36 讲
王潇俊
携程系统研发部总监
39681 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
推荐试读
换一换
01 | 持续交付到底有什么价值?
时长 16:55
04 | 一切的源头,代码分支策略的选择
时长 13:31
19 | 发布是持续交付的最后一公里
时长 12:59
课程目录
已完结/共 42 讲
开篇词 (1讲)
开篇词 | 量身定制你的持续交付体系
时长 10:58
基本概念 (3讲)
01 | 持续交付到底有什么价值?
时长 16:55
02 | 影响持续交付的因素有哪些?
时长 15:54
03 | 持续交付和DevOps是一对好基友
时长 10:04
配置管理 (4讲)
04 | 一切的源头,代码分支策略的选择
时长 13:31
05 | 手把手教你依赖管理
时长 12:13
06 | 代码回滚,你真的理解吗?
时长 11:46
07 |  “两个披萨”团队的代码管理实际案例
时长 09:47
环境管理 (6讲)
08 | 测试环境要多少?从现实需求说起
时长 10:23
09 | 测试环境要多少?从成本与效率说起
时长 10:06
10 | 让环境自己说话,论环境自描述的重要性
时长 11:02
11 | “配置”是把双刃剑,带你了解各种配置方法
时长 12:44
12 | 极限挑战,如何做到分钟级搭建环境?
时长 12:18
13 | 容器技术真的是环境管理的救星吗?
时长 12:50
构建集成 (5讲)
14 | 如何做到构建的提速,再提速!
时长 10:59
15 | 构建检测,无规矩不成方圆
时长 10:28
16 | 构建资源的弹性伸缩
时长 12:44
17 | 容器镜像构建的那些事儿
时长 11:49
18 | 如何做好容器镜像的个性化及合规检查?
时长 12:43
发布及监控 (6讲)
19 | 发布是持续交付的最后一公里
时长 12:59
20 | Immutable!任何变更都需要发布
时长 10:56
21 | 发布系统一定要注意用户体验
时长 12:43
22 | 发布系统的核心架构和功能设计
时长 14:11
23 | 业务及系统架构对发布的影响
时长 10:48
24 | 如何利用监控保障发布质量?
时长 14:19
测试管理 (3讲)
25 | 代码静态检查实践
时长 12:12
26 | 越来越重要的破坏性测试
时长 10:02
27 | 利用Mock与回放技术助力自动化回归
时长 13:32
持续交付平台化 (3讲)
28 | 持续交付为什么要平台化设计?
时长 13:27
29 | 计算资源也是交付的内容
时长 11:08
30 | 持续交付中有哪些宝贵数据?
时长 13:12
持续交付移动App (3讲)
31 | 了解移动App的持续交付生命周期
时长 14:21
32 | 细谈移动APP的交付流水线(pipeline)
时长 10:49
33 | 进阶,如何进一步提升移动APP的交付效率?
时长 13:58
实践案例 (4讲)
34 | 快速构建持续交付系统(一):需求分析
时长 11:04
35 | 快速构建持续交付系统(二):GitLab 解决代码管理问题
时长 16:26
36 | 快速构建持续交付系统(三):Jenkins 解决集成打包问题
时长 16:58
37 | 快速构建持续交付系统(四):Ansible 解决自动部署问题
时长 14:47
特别放送 (2讲)
持续交付专栏特别放送 | 答疑解惑
时长 11:16
持续交付专栏特别放送 | 高效学习指南
时长 09:14
结束语 (1讲)
结束语 | 越痛苦的事,越要经常做
时长 07:09
结课测试 (1讲)
结课测试|这些持续交付的相关知识,你都掌握了吗?
时长 00:28
持续交付 36 讲
15
15
1.0x
00:00/00:00
登录|注册

06 | 代码回滚,你真的理解吗?

持续交付平台提供一键代码回滚的功能
特性分支合入到 master 时产生的非合并commit
集成分支上线前的回滚方法
回滚原则
回滚的类别及不同的回滚策略
需要回滚及不需要回滚的情况
代码回滚的概念
集成分支上线后回滚
集成分支上线前回滚
个人分支回滚
集成分支上的代码回滚不用 reset --hard 的方式
下次线上发布用来修复刚才线上运行的问题
线上回滚后,源代码无问题
集成分支上线后回滚
集成分支上线前回滚
个人分支回滚
持续交付平台提供代码一键回滚的功能
线上产品包回滚
合并请求后的回滚
集成分支上的回滚
本地分支通过 reset --hard 回滚
个人开发环境的分支回滚
代码回滚
包回滚
思考题
总结
三种典型回滚场景及回滚策略
代码回滚必须遵循的原则
哪些情况下包的回滚无需回滚代码?
哪些情况下需要回滚代码?
你是不是也遇到了问题?
什么是代码回滚?
你真的理解代码回滚吗?

该思维导图由 AI 生成,仅供参考

什么是代码回滚?

在我正式开始今天的分享前,先给你讲两个核心概念:
包回滚是指,线上运行的系统,从现在的版本回滚到以前稳定的老版本。
代码回滚是指,Git 分支的指针(游标),从指向当前有问题的版本改为指向一个该分支历史树上没问题的版本,而这个版本可以是曾经的 commit,也可以是新建的 commit。

你是不是也遇到了问题?

在日常的代码管理中,困扰开发工程师最多,也是他们向我咨询得最多的问题就是:代码回滚的问题。这些问题,有的只是影响个人开发,而有的涉及了整个团队。我把这些问题进行了整理汇总,你可以看看是否也遇到过类似的问题?
今天上午我在自己的开发环境上拉了一条新分支,提交了 5 个 commit,最新提交的 3 个 commit 我不想要了,那我该怎么退回到这 3 个 commit 之前的那个 commit?
答:参考我在下面即将分享的“个人分支回滚”的内容。
我本地的分支通过 reset --hard 的方式做了代码回滚,想通过 push 的方式让远端的分支也一起回滚,执行 push 命令时却报错,该怎么办?
答:如果不加 -f 参数,执行 reset --hard 后,push 会被拒绝,因为你当前分支的最新提交落后于其对应的远程分支。push 时加上 -f 参数代表强制覆盖。
线上产品包已经回滚到昨天的版本了,我清清楚楚地记得昨天我把发布分支上的代码也 reset --hard 到对应的 commit 了,怎么那几个有问题的 commit 今天又带到发布分支上了?真是要命!
答:集成分支不能用 reset --hard 做回滚,应该采用集成分支上新增 commit 的方式达到回滚的目的。
我刚刚在 GitLab 上接纳了一个合并请求(Merge Request),变更已经合入到 master 上了,但现在我发现这个合并出来的 commit 有较大的质量问题,我必须把 master 回滚到合并之前,我该怎么办?
答:可以在 GitLab 上找到那
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

代码回滚是软件开发中常见的操作,涉及到从当前版本回滚到以前稳定版本的情况。在日常代码管理中,开发人员可能会遇到各种代码回滚的问题,包括个人分支回滚、集成分支上线前后的回滚等。在进行代码回滚时,需要遵循一些原则,比如不使用 reset --hard 的方式进行集成分支上的代码回滚,以避免可能导致不需要的功能再次被引入到集成分支。此外,文章还介绍了哪些情况下需要回滚代码,以及包的回滚无需回滚代码的情况。总的来说,代码回滚是一个重要的技术操作,需要根据具体情况采取合适的方式进行回滚,以确保代码的稳定性和质量。 文章还介绍了三种典型的代码回滚场景及相应的处理策略,包括个人分支回滚、集成分支上线前回滚和集成分支上线后回滚。对于每种场景,都提供了详细的处理步骤和示意图,帮助读者理解如何在实际情况中进行代码回滚操作。此外,文章还提到了一些思考题,引导读者深入思考代码回滚过程中可能遇到的问题,促进对代码管理的深入理解。 总的来说,本文通过具体的场景案例和详细的操作步骤,帮助读者全面了解了代码回滚的概念、原则和实际操作,对于需要进行代码回滚的开发人员具有实际指导意义。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《持续交付 36 讲》
新⼈⾸单¥59
立即购买
01 | 持续交付到底有什么价值?
04 | 一切的源头,代码分支策略的选择
19 | 发布是持续交付的最后一公里
22 | 发布系统的核心架构和功能设计
27 | 利用Mock与回放技术助力自动化回归
33 | 进阶,如何进一步提升移动APP的交付效率?
登录 后留言

全部留言(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-17
    3
  • zhchnchn
    有个问题请教,在集成分支上线后回滚的操作步骤中,$ git reset --soft origin/master # --soft 使得本地的 master 分支的指针重新回到 V05javascript:;30,而暂存区 (index) 变成 V0529 的内容。这部操作有什么意义吗?文中后面不是说“如果要修复问题,可以在开发分支中先revert掉 C3',这样被清除的几个commit的内容又恢复了”吗?

    作者回复: 我们说上线后不得已才会回滚集成分支的代码(短时间不能修复A功能代码的问题,而B功能又急着要上线)。 上述操作,我们把集成分支回到正确的地方,并且在集成分支上通过新增一个commit的方式,其意义有4个: 让团队其他成员新拉取的代码都没有问题;让曾经拉取了问题代码的分支merge回集成分支的时候,也不会再次把问题带进来;不会影响其他紧急上线的功能;负责修复问题的开发人员,只需再执行revert就能取到需要修复的代码。

    2018-07-24
    2
    6
  • 致远
    老师,在我理解,集成代码上线前和上线后的回滚原理是一样的,为何还要区分出来呢?

    作者回复: 上线前可以通过revert直接处理,纬度是commit;但是上线后,部署包已经存在,你必须考虑与它的对应关系。举个例子,有3个commit,1、2、3上线前你可以回滚1、3,保留2;但上线后,3个commit都要回滚,特别是如果做了自动化代码回滚,这条原则就很重要

    2018-07-29
    2
  • 白天不懂爷的黑
    第二个问题是不是拥有master权限的小伙伴直接在网页上修改的啊,😄。第三个问题,应该也可以不用提交commit,我们这是每build一次代码就备份一次当前构建的包,回滚的话列出最近10次备份的包,然后回滚对应的备份。 老师,我这最近回滚有点问题,比如说,代码发布了三次,然后都上线失败了,备份的三次包也是有问题的,然后测试不知道哪一个版本是最近正确的版本,导致到处问,这个有什么好办法吗?

    作者回复: gitlab高版本对保护分支做了更加精细的权限控制,允许角色或个人(不一定是master)对保护分支做merge和push。这道题主要让大家回顾一下集成分支代码revert的做法,不是删除不要的commit,而是新建一个commit,如果revert的时候不勾选发起merge request,那么这个revert产生的commt就只有一个parent。 发布包本身也是一条路径线,也需要被记录,建议发布包本身带一个比较容易辨识的版本号,commitid作为属性记录在发布包上,这样整个发布包历史也可以很好管理

    2018-07-17
    2
    1
  • 橙子
    commit粒度怎么控制才好,开发分支针对一个文件修改就有一个commit吗?还是一个功能点commit会比较好?

    作者回复: 没有特别的控制约束,最终是以merge request为单位,多个commit的集合,一个mr基本上就是一个功能

    2018-07-25
  • 还在想,还念
    老师可不可以先讲下分支策略流程 实践中基本的分支策略 master feature uat 等而不是一开始直接讲代码回滚 作为一个测试工程师表示很困惑

    作者回复: 分支策略可以看一下第4讲的内容

    2018-07-18
  • 在路上
    对于特定分支代码 commit 回滚使用 git debate -i 这种是不是更好操作一些。
    2020-04-07
    1
  • 天天向上
    我有个疑问哈,如果在集成分支上对某个特性分支request进行了revert后。那我之后这个特性分支改完后,再向集成分支进行merge,那么之前revert掉的就无法再合并了呀?
    2019-12-01
    1
    1
  • tanatang
    问题一:1、创建一个新分支,测试仅回滚3个commit后,是否正常可用。2、将新分支merge回集成分。 问题二:特性分支合并回master之后,出了合并的commit外,原本特性分支更新过程中的commit也同步到了master中。 问题三:需要,原因就类似于文中的 集成分支不要回滚,而是弄新的commit一样。
    2023-04-06归属地:四川
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部

玻璃钢生产厂家亳州景区玻璃钢雕塑制作玻璃钢雕塑多少钱设计精美达州玻璃钢雕塑摆件施工方法安徽玻璃钢牛动物雕塑制作工厂玻璃钢艺术雕塑平面图福州户外景观玻璃钢雕塑山西省玻璃钢雕塑厂家漯河玻璃钢卡通雕塑生产卡通玻璃钢雕塑圆柱平顶山不锈钢水景玻璃钢人物雕塑陕西太湖石玻璃钢卡通雕塑济南促销玻璃钢卡通雕塑人物玻璃钢雕塑厂家现货运城铸铜玻璃钢景观雕塑厂家云南公园玻璃钢雕塑厂家大连定制玻璃钢造型雕塑定制仿石材玻璃钢花盆玻璃钢泡沫雕塑多少钱吉林玻璃钢蔬菜雕塑淮安动物玻璃钢雕塑设计温州公园玻璃钢雕塑价格泰州玻璃钢鹿雕塑厂家西安制作玻璃钢雕塑做玻璃钢雕塑平台排名江阴玻璃钢雕塑玻璃钢卡通雕塑草莓制作景观玻璃钢卡通雕塑规格蜗牛玻璃钢卡通雕塑厂家湛江玻璃钢人物雕塑费用吉安玻璃钢抽象雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化