• 大M 置顶
    2018-07-17
    第一个通过reset-hard和reset -soft 可以实现,下面两个求指教。

    作者回复: 设计这个问题,一来请大家注意“集成分支的回滚”,不能用reset --hard的方式来清除不要的代码,而该使用revert;二来鼓励大家通过实践与思考,真正地掌握revert命令,以便高效解决各类代码回滚的问题。

    通过gitlab UI界面,我们只能回滚单个commit,而用git revert命令,可以一次性回滚连续的或间隔的几个commit,其次,如果遇到merge产生的合并commit,必须使用 -m 参数才能回滚,因为要确认正确的父节点

    这里还引申出的一个问题是,如果通过UI回滚单个commit不能满足回滚要求的话,建议开发在本地利用revert灵活的方式完成代码回滚,本地测试没问题,再push到远端,然后发回滚的Merge Request。

    
     1
  • 孙文正 置顶
    2018-08-21
    希望每篇的下面分享一些具体实施的文章。
    比如gitlab的ci流程具体的部署等等。

    作者回复: 这些都会在最后的一节中介绍,但是这些其实gitlab的doc都挺清楚的,我还是力求将一些大家不一定了解但却有用的东西

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

    作者回复: 我们说上线后不得已才会回滚集成分支的代码(短时间不能修复A功能代码的问题,而B功能又急着要上线)。

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

    
     1
  • su
    2019-12-14
    不知道我理解的是不是有误
    1. 除了点击合并请求中的 revert 按钮这种方法外,可以本地revert操作,然后push推送
    2. 禁止直接向 master 做 push 操作,而产生出commit节点,是不是因为merge方式的变更,还是我理解有误,如:rebase变基操作,cherry-pick方式,而不是merge request方式
    3. 我觉得需要的,记录变更,即使是相同内容的commit
    
    
  • 天天向上
    2019-12-01
    我有个疑问哈,如果在集成分支上对某个特性分支request进行了revert后。那我之后这个特性分支改完后,再向集成分支进行merge,那么之前revert掉的就无法再合并了呀?
    
    
  • Geek_c991f2
    2019-08-20
    请问思考题答案在哪里啊?还有如果项目有3个团队开发,dev会合并3个团队的分支,但是master因为每次发版本不会发3个团队的东西,不会合并dev,难道master又要和dev那样子,再一次和3个团队的分支重新合并一次吗?
    
    
  • Jason
    2019-03-17
    码云上有这个smart merge么
    
    
  • 松花皮蛋me
    2019-02-20
    回滚建议新增commit的
    
    
  • kevinsu
    2019-01-03
    老师 线上java代码回滚,重新指定分支重新发版也算吧
    
    
  • 孙磊
    2018-09-29
    统统一键reset路过ヽ(  ̄д ̄;)ノ,单项目上线频率一周一次
    
    
  • 致远
    2018-07-29
    老师,在我理解,集成代码上线前和上线后的回滚原理是一样的,为何还要区分出来呢?

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

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

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

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

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

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

    作者回复: gitlab高版本对保护分支做了更加精细的权限控制,允许角色或个人(不一定是master)对保护分支做merge和push。这道题主要让大家回顾一下集成分支代码revert的做法,不是删除不要的commit,而是新建一个commit,如果revert的时候不勾选发起merge request,那么这个revert产生的commt就只有一个parent。

    发布包本身也是一条路径线,也需要被记录,建议发布包本身带一个比较容易辨识的版本号,commitid作为属性记录在发布包上,这样整个发布包历史也可以很好管理

    
    
我们在线,来聊聊吧