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

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

作者: 彭涛聊Python | 来源:发表于2019-03-09 16:47 被阅读0次
image

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

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

image

吐槽了大概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

处理冲突

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

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

image

重置提交

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

git reset --soft commit_id # 重置HEAD(当前分支顶端)到指定commits
这样我们本地就会出现未commit的文件了,这儿之所以用soft不会删除代码。

image

处理数据库变更

上面我提到了我们需要额外处理数据库的代码的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功能,至此全文完毕,谢谢大家。

往期阅读:

聊聊最近的几件小事儿

第5次赠书,无套路包邮送14本书,赶紧来!

image

相关文章

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

    今天老板突然给我说,涛总,我们Y功能不要了哈,你从生产环境给下掉吧。 什么???我辛辛苦苦写了半个月的功能就不要了...

  • 吭哧吭哧我说坚持你说要!

    也许坚持一件事情远比想象的要难许多,很多时候坚持着突然就开始怀疑自己为什么这么拼。其实看看上面的数据说这话挺不好意...

  • 吭哧吭哧换轴承

    20190620奇怪的咔哒声,换轴承。今天20200911一年3月又一次因为吭哧声而换轴承。上周末到售后,说10多...

  • 不要低估孩子,不要高估自己

    今天要出去办事情,源源说,你吭哧吭哧办事情,我吭哧吭哧写作业。我被她逗笑了,说就这么定了! 出了门,华灯初上。微风...

  • 生活要吭哧吭哧往上爬

    01拥抱买房的压力 我是连岳忠粉,他很喜欢劝读者买房。他说人是越变越聪明的,而变聪明最重要的手段就是行动。但行动会...

  • 第一性原理

    基本原理+假设—>吭哧吭哧=实验正确验证 —从第一性原理出发 实验参数+假设—>吭哧吭哧=实验正确验证 —不从第一...

  • 没有金刚钻,净揽瓷器活(1、自虐初体验)

    加入“好报写作群”才一周,真难!每天不是吭哧吭哧忙活到半夜,就是半夜起来吭哧吭哧的忙活。 70后主妇,平日里工作披...

  • 太子的湾

    吭哧吭哧,吭哧吭哧, 蹬起我的小毛驴,直奔太子湾。 厚云满天,清风拂面, 梧桐裸着胳膊,柳芽儿坠满了线, 鲜花枝头...

  • 吭哧瘪肚

    每天的日更对于我来说基本写的时候都是吭哧瘪肚的,特别吃力,而且质量也不咋滴。这是为什么呢?读书少呗!思想贫瘠,灵魂...

  • 2022.10.08的天空。

    寒露时节 城门搬砖 吭哧吭哧 万井烟景

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/bcfepqtx.html