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

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

问题描述

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

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

image.png

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

分析一下

  1. 首先解决冲突浪费时间,我的新功能代码每次提测到测试分支都需要解决冲突。
  2. 我在测试分支解决冲突,只能按照小A优化后的代码逻辑的去解决,和我自己的分支逻辑并不一致。
  3. 交付给测试同学的测试分支代码,和我自己分支的代码不一致,这种测试是没有意义的。

反思出问题的原因

  1. 工厂模式使用的不合理
  2. 任务分配的不合理

代码层面

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

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

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

go

复制代码

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

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

package factory
type 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 factory
type 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操作不规范,战友提刀来相见!

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

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

你的年终奖还好吗,欢迎在评论区讨论。


微信号:wangzhongyang1993  公众号:程序员升职加薪之旅  B站视频:王中阳Go

相关文章
|
3月前
|
消息中间件 小程序 Java
【规范】看看人家Git提交描述,那叫一个规矩
本文通过IDEA中的Git描述规范插件【git commit message helper】,介绍了Git提交描述的规范流程,强调了团队开发中统一标准的重要性,并通过实例展示了规范的提交记录如何提高代码管理和维护效率。最后,文章提供了几个实用的Git提交描述案例,帮助读者更好地理解和应用这些规范。
53 0
【规范】看看人家Git提交描述,那叫一个规矩
|
3月前
|
敏捷开发 小程序 持续交付
【规范】Git分支管理,看看我司是咋整的
本文介绍了Git分支管理规范的重要性及其在企业中的应用。通过规范化的分支管理,可加速团队协作、确保代码质量、维护主分支稳定,并支持敏捷开发。文中详细描述了主分支(如master、develop)和辅助分支(如feature、hotfix)的作用,并提供了实际开发流程示例,包括开发前、开发中、提测、预生产和部署上线等阶段的操作方法。旨在帮助团队提高效率和代码质量。
147 0
【规范】Git分支管理,看看我司是咋整的
|
3月前
|
开发工具 git
Git——commit的提交规范
Git——commit的提交规范
99 4
|
3月前
|
JavaScript 测试技术 开发工具
Git 分支设计规范
Git 分支设计规范
184 11
|
3月前
|
存储 测试技术 开发工具
企业Git 规范的必要性-阿里云开发者社区
既然认同需要一份 Git 规范,那么这个规范需要规范哪些内容,解决哪些问题。
|
3月前
|
监控 程序员 开发工具
如何规范Git提交-参考阿里云开发者社区
这篇文章分享了如何规范Git提交,介绍了commit message的格式规范,并通过webhook监控机制来确保代码提交的规范性,从而提高研发效率和代码维护质量。
|
3月前
|
开发工具 git
Git——简单的分支规范
Git——简单的分支规范
37 0
|
4月前
|
测试技术 开发工具 git
git 提交规范
git 提交规范
160 2
|
4月前
|
前端开发 测试技术 开发工具
|
5月前
|
开发工具 git
idea的git reset current branch to here操作详解
idea的git reset current branch to here操作详解
534 1