年终奖都没了,还要扣我绩效,门都没有,哈哈。

这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。

文末留言抽奖,聊聊你的年终奖。

问题描述

小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开发新功能。

小A在我之前把代码提交到了测试分支,我想提交我的新功能代码到测试分支时发现巨多冲突,脑袋瞬间就炸了,Boom一声惊雷响啊。

PS:因为小A的需求不急,但是改动巨大;我的需求很急,马上要提测,否则就延期扣绩效了,说真的,我着急了,哈哈哈。

分析一下

  1. 首先解决冲突浪费时间,我的新功能代码每次提测到测试分支都需要解决冲突。

  2. 我在测试分支解决冲突,只能按照小A优化后的代码逻辑的去解决,和我自己的分支逻辑并不一致。

  3. 交付给测试同学的测试分支代码,和我自己分支的代码不一致,这种测试是没有意义的。

反思出问题的原因

  1. 工厂模式使用的不合理

  2. 任务分配的不合理

代码层面

TIPS:以下代码示例语言为Go

因为是工厂设计模式,我负责的实现类A和他的实现类B虽然没有直接关系。但是因为他修改了工厂类中的方法定义。

比如之前工厂类中的接口是这么定义的

package factorytype xxx interface {GetXxxx(ctx context.Context, req aaa.aa) (res bbb.bb, err error)
}

但是小A优化(修改)了工厂类中的接口定义:

package factorytype xxx interface {GetXxxx(ctx context.Context, req ccc.cc) (res ddd.dd, err error)
}

这样就导致了一个问题:

我想合并我的代码到测试分支也必须将我的实现类像小A一样,修改传参类型和返回类型。

但是我们都在不同的分支上开发,我是没有他定义的类型ccc.cc,ddd.dd的。

我又不能直接把他定义的ccc.cc,ddd.dd要过来,在我自己的分支上开发,一是因为需求不一致,小A的上线周期会比我长;二是这种操作本身就不规范。

解决问题

1.代码层面:

我们想到的方案是合理使用interface

工厂类中方法的入参和出参设置为interface{}类型

package factorytype xxx interface {GetXxxx(ctx context.Context, req interface{}) (res interface{}, err error)
}

这样就比较容易进行扩展了。

2.Git层面:

方法1的入参和出参设置为interface{}类型的方案,并没有从根本上解决我们的问题。

原因是这样的:

小A的需求是整体优化工厂类和各个实现类的入参、出参,优化内部逻辑,抽取方法。

小A的迭代优化修改变动很大,导致和我实现的新需求有比较大的冲突。

但是他的Git分支又在我之前提交到了测试环境,导致我无法正常提交我的代码。

如果我要提交就要解决各种冲突,解决冲突就要按照小A的优化逻辑去改,提测分支和我自己分支的不一致,难顶啊。

考虑到小A的修改暂时不需要提测,上线周期也比较长。

最终方案:

最终的解决方案是这样的:

  1. 从远程的测试分支拉取了一个备份分支,删除小A提交的远程测试分支
  2. 把我本地需要测试的分支提交到测试分支,交付测试(因为我的需求很急,而小A的需求并不急)

相关命令

这波骚操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家:

Git 重命名远程分支

1.先重命名本地分支

git branch -m 旧分支名称  新分支名称

2.删除远程分支

git push --delete origin 旧分支名称

3.上传新修改名称的本地分支

git push origin 新分支名称

4.修改后的本地分支关联远程分支

git branch --set-upstream-to origin/新分支名称

推荐阅读

【Git必知必会】多人协同开发,紧急修复线上bug的操作指南。

总结

开发起来一时爽,维护起来火葬场。

Git操作不规范,战友提刀来相见!

呼应一下开篇,这是临时解决办法的一个经验分享。肯定还有最优解,但是对我来说不重要,再不使用骚操作就该扣绩效了。

年终奖都没了,还要扣我绩效,门都没有,哈哈。

一起进步 抱团取暖

就业环境不好,就业压力大,除了提高自己更应该抱团取暖,互相帮助:

点这里—>加入就业互助交流群

Git操作不规范,战友提刀来相见。相关推荐

  1. 使用git的正确方式,Git操作不规范,代码被吞两行泪

    git是开发中必不可少的,其使用虽然简单,但是也是要注意点事项 先commit(本地版本控制),把自己本地修改或者更新的提交到本地库,再pull(下拉更新并且解决冲突等),把远程仓库最新版本拉到本地, ...

  2. Git操作手册|命令速查表

    Git操作手册|命令速查表 这篇文章主要介绍Git分布式版本管理与集中式管理的一些差异,总结下Git常用命令作为日后的速查表,最后介绍Git进阶的一些案例. 本文分为以下几个部分: Git与SVN差异 ...

  3. 手把手教你完成CSDN对接百度统计 看完这篇文章你还不会对接 欢迎您提刀顺着网线来砍我!!!!

    大家好,我是:じ☆ve朽木,开发经验都是一步一步慢慢积累的,没有谁生来就具有的,只要我们付出了努力,肯定就会有收获!进入我的博客,带你了解Java知识,js小技巧,带你玩转高端物联网.博客地址为:じ☆ ...

  4. 给懒懒的Git操作手册

    Hi~ o(* ̄▽ ̄*)ブ,懒懒,现在你一定收到信啦,这里就是git操作手册,以后那个主页,需要添加日记,你可以按照这个手册一步一步的实现啦. 准备工作,只需要准备一次 下载GitHub deskto ...

  5. 将本地项目上传到github,git操作详细指导,不看后悔深度好文!

    github入门到上传本地项目 GitHub是基于git实现的代码托管.git是目前最好用的版本控制系统了,非常受欢迎,比之svn更好. GitHub可以免费使用,并且快速稳定.即使是付费帐户,每个月 ...

  6. git操作手册_基本的Git手册

    git操作手册 介绍 (Introduction) Hi! I am Sanjula, and in this guide I hope to teach you a little bit about ...

  7. 手把手教你熟悉Git操作

    文章目录 Git 一.版本控制 二.Windows安装Git 1. Git 安装 2. Git 一次性配置 三.理解Git文件的三种状态与工作模式 四.创建版本库并提交文件 1. 初始化git 2. ...

  8. GitHub防黑客新措施:弃用账密验证Git操作,改用token或SSH密钥,今晚0点执行

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 还在用账户+密码对GitHub上的Git操作进行身份验证? 赶紧整个token(令牌)或SSH密钥吧! 8月14号0点(8月13日9:00 ...

  9. 【Tools】git操作总结

    git操作总结 下载的工程带有子工程submodule: 当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令 ...

最新文章

  1. 超强实时人像抠图算法开源,随心所欲背景替换!
  2. 4.6 什么是神经风格迁移-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. 如何玩转 WebGL 并行计算
  4. (转)解读NTFS(一)
  5. LINQ-sql的终极疯狂
  6. 【AI视野·今日NLP 自然语言处理论文速览 第十六期】Tue, 29 Jun 2021
  7. 【TensorFlow】TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法)
  8. sql语句distinct_带DISTINCT子句SQL SELECT语句
  9. java 康塔纳 牙盘_这种配置不要六千?你敢信!
  10. PostgreSQL数据库——Pigsty grafana Ansible
  11. openwrt使用tayga/totd实现NAT64/DNS64
  12. linux pvs命令安装,Linux中的ldd命令和pvs命令
  13. 浅谈sketch插件开发(三)
  14. CM安装成功,CM的web界面登录不上解决方案
  15. [OHIF-Viewers]医疗数字阅片-医学影像-Cornerstone Tools
  16. 云栖大会 峰会 王德根_2019云栖大会在杭州成功举办
  17. 使用 Charles 简单解决微信开发者工具网络连接失败的问题
  18. Java基础50题(3) 21~30题
  19. 金蝶EAS DEP脚本(4)—— 控件常用脚本之设置F7默认值
  20. 网桥信号测试软件,史上最全的无线网桥应用知识

热门文章

  1. jeeplus框架代码生成器功能的使用
  2. html和dom区别,核心dom和html dom的区别
  3. python找不到了_python包找不到
  4. ps做手机计算机界面,手机设计!移动设备的界面设计尺寸
  5. Java程序员找工作很难吗?可能没有get这些内容
  6. 推荐系统相关顶会整理
  7. git学习之时光穿梭机
  8. E500 键盘粘键,倒水滑落键盘
  9. java软件工程师 英文简历_java工程师英文简历范文
  10. [幽默笑话]聪明男人劝老婆