吭哧吭哧开发2周,老板突然说这个功能不要了。。。

简介: 吭哧吭哧开发2周,老板突然说这个功能不要了。。。

今天老板突然给我说,涛总,我们Y功能不要了哈,你从生产环境给下掉吧。

什么???我辛辛苦苦写了半个月的功能就不要了,还没用几天呢?大哥你这是在逗我么?虽然你比我长得帅,但是也不能这样玩儿我吧。


吐槽了大概2个小时之后,我还是老老实实的继续搬砖,毕竟工作还是要继续的,我不吃饭,我娃还要吃饭的嘛。


作为一名优秀兼具高级搬砖农民工,要下线某一个功能,无非是要把关于这个功能的代码都回退了嘛,直接到代码库点几个按钮的事儿,还是简单,直接干,分分钟的事儿嘛。

到代码库一看傻眼了,因为这个功能比较大涉及了多次提交合并啊,中间还穿插了很多其他的提交,并且还做数据库表的变更啊,不是那么简单啊。

嗯,就是因为不那么简单,老板才把这么「艰巨」的任务给我了,于是我想了300秒,发现无非是git的玩法嘛。

解决步骤如下:

  1. 回退提交:通过git revert commit_id 回退某个提交,我这里面操作了大概8次提交
  2. 处理冲突:回退过程中,估计会有冲突,要注意处理冲突。
  3. 重置提交:由于回退涉及了数据库表的变更,我们不能把migrations代码回退了。
  4. 处理数据库变更:最后重新生成数据库的变更 migrations
  5. 合并提交:回退生成了多个提交,我们通过reset操作,进行合并rebase一下合并多个revert提交。
  6. 跑测试

上面就是关于整个回退操作,大概的解决方案就是这样了,如果你已经知道了,本文就不用往下看了,如果不清楚,下面我再来细细聊一下:

回退提交

我们要下线某一个功能首先是需要回退代码,回退主要是revert操作

git revert commit_id 回退某个提交,并且重新生成提交的方式

通过 git revert --help可以看到对应的方法

image.png

处理冲突

由于代码之间跨度较大,回退的过程可能会有一定冲突,这里面我主要使用 git 的 mergetool的可视化工具进行操作,对比工具可以使用 gvimdiff/kdiff3/meld/vimdiff。

git mergetool -t vimdiff # 这里面大家可以通过help的方式进行学习。

image.png

重置提交

我们把代码都进行revert掉生成了新的提交之后,再进行

git reset --soft commit_id  # 重置HEAD(当前分支顶端)到指定commits

这样我们本地就会出现未commit的文件了,这儿之所以用soft不会删除代码。

image.png

处理数据库变更

上面我提到了我们需要额外处理数据库的代码的migrations,为什么需要这样呢?我们以在Python Django框架为例子,我们数据库变更通过migrations文件,大概内容如下:

# 0123_auto_20180614_12.py
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
    dependencies = [
        ('XXXX', '0122_address'),
    ]
    operations = [
        migrations.RenameField(
            model_name='YYY',
            old_name='ZZZ',
            new_name='MMMM',
        ),
        migrations.AddField(
            model_name='AAAA',
            name='NNN_id',
            field=models.CharField(blank=True, db_index=True, default=b'', help_text='test', max_length=30, verbose_name='test'),
        ),
    ]


我们回退代码,会把这个文件给删除掉,由于数据库上下有依赖,这里我们只需要删除model的某个字段就行了(而不需要去删除这个文件migraionts)。

所以这儿我们要单独处理掉migrations文件的变更(不回退变更文件,只把model变更的代码回退就行),到时候我们重新进行生成新的migrations文件。


合并提交

最后这一步其实可以不用操作了,因为回退操作,我们已经做完了,但是出于习惯,我们通过rebase的方式进行合并多个提交,让多个revert的操作最后只剩下一个,整个提交目录树看起来更为整洁干净。这样后期如果我们需要这个功能的时候也能很方便找回来。


操作如下:

git rebase -i HEAD~3 # 以交互形式把最近三个提交合并

rebase常用就是把一个分支修改合并到另一个分支,由于较为复杂,这里面我就不过多进行解释了,大家可以自行去查看。


最后我们就可以提交我们代码发起新的Pull Request进行合并了,然后跑单元测试,集成测试,黑盒等等,然后上线代码,下线我们Y功能,至此全文完毕,谢谢大家。


相关文章
|
程序员
766.每周复盘-第十一周
766.每周复盘-第十一周
|
存储 开发工具
我花了一个星期,做出了公司的管理系统,只需几个步骤!
我是企业的管理人员,公司发展到现阶段,感觉进入到了瓶颈期,每个员工的工作都已经饱和,很难再挤出时间做其它的事情,需要一款合适的管理软件来协作我们的工作。本来打算买一套管理软件就行了,现实却并没有那么简单。
我花了一个星期,做出了公司的管理系统,只需几个步骤!
|
JSON 小程序 数据库
一个月空余时间微信诗词小程序前后端开发上线实践指南
一个月空余时间微信诗词小程序前后端开发上线实践指南
一个月空余时间微信诗词小程序前后端开发上线实践指南
|
Devops 数据处理
这个简单的小功能,半年为我们产研团队省下213个小时
云效Projex的产研团队已经提前吃螃蟹半年多了。这半年来,云效Projex共设置15条自动化规则,累计执行自动化任务6419次。假设原本一个任务需要耗费人力跟进2分钟,半年下来,相当于给云效团队节省了213个小时。这213个小时,用来做其他更重要的事情,不香吗?
679 0
这个简单的小功能,半年为我们产研团队省下213个小时
|
人工智能 自然语言处理 数据挖掘
阿里员工一天有26小时,怎么做到的?
阿里人一天的工作日常,是一场办公黑科技展,更是一部“时间减史”。 今天有幸来到号称“宇宙西厂”的阿里巴巴西溪园区逛逛,亲身体验下阿里人的一天,感受员工的数字化办公和生活。
阿里员工一天有26小时,怎么做到的?
|
存储 算法 数据挖掘
刚入职的数据分析师,上千数据指标,如何1周开发完?
作者:陈梦婷 更多内容详见数据中台官网 https://dp.alibaba.com 小白同学终于毕业啦!学过高等数学、java、C++、数据库等课程,擅长编写算法,参加过多次数学建模大赛,在这个背景下,小白毅然决然选择了数据分析师这个岗位,毕业后顺利进入一家互联网公司,开始职场初体验。
2879 0
工作半年遇到最奇葩的问题
工作半年遇到最奇葩的问题 背景 公司最近买了一套项目,在启动的时候出现了一系列奇怪的问题,对方的技术栈要求是Tomcat7启动,但是由于我们公司出于安全的考虑所以是要求用Tomcat9进行启动的。 问题描述 下面情况都是相同war包相同Tomcat情况下 系统 Tomcat版本 能否启动 Windows Tomcat7 能 Windows Tomcat9 能 macOS Tomcat7 能 macOS Tomcat9 不能 Linux Tomcat7 能 Linux Tomcat9 不能 由于对于项目的不熟悉,导致找了很久才找出来原因。
942 0
|
Java 数据库连接
工作周记 - 第九周 (2016/07/18 - 2016/07/22) 这么快就结束了吗?这才真正开始呢!
其实后台开发已经接近尾声,目前后台团队作为辅助参与到app的接口调试中 当然接口调试会发生很多莫名的情况,需要辅助解决 简述一下遇到的问题: 1、手机号验证规则,老的手机验证正则表达式是不支持新号的,现在运营商开放了很多新号,导致规则失效,比如新增的 147 开头的手机号就验证不了,还好有同事新换手机号。
749 0
|
消息中间件
工作周记 - 第七周 (2016/07/04 - 2016/07/08)
1、拆分消息队列   原本在登录注册的时候需要使用到短信发送,这个需要使用到消息队列,当时只放入在项目中   现在的新需求在各个环节都有不同的消息推送,短息服务,以及日志保存,这些索性单独拎出来作为一个服务提供   (消息队列采用RabbitMQ,各位看管有兴趣可以参考之前发的文章,另外MQ也...
812 0

相关实验场景

更多