網站首頁 編程語言 正文
問題描述
小A和我并行開發,他在優化之前的代碼邏輯,我在開發新功能。
小A在我之前把代碼提交到了測試分支,我想提交我的新功能代碼到測試分支時發現巨多沖突。
首先解決沖突浪費時間,我的新功能代碼每次提測都需要解決沖突。
再者我再測試分支解決沖突,只能按照小A優化后的代碼邏輯的去解決,和我自己的分支邏輯并不一致。
交付給測試同學測的代碼,和我自己分支的代碼不一致,這種測試是沒有意義的。
反思出問題的原因
- 工廠模式使用的不合理
- 任務分配的不合理
代碼層面
因為是工廠設計模式,我負責的實現類A和他的實現類B雖然沒有直接關系。但是因為他修改了工廠類中的方法定義。
比如之前工廠類中的接口是這么定義的
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的上線周期會比我長,二是這種操作本身就不規范。
解決問題
從代碼設計上優化
我們想到的方案是合理使用interface
把工廠類中要實現的接口方法的入參和出參設置為interface{}
類型
package factory type xxx interface { GetXxxx(ctx context.Context, req interface{}) (res interface{}, err error) }
這樣就比較容易進行擴展了。
從git操作上優化
但是入參和出參設置為interface{}
類型的辦法并沒有從根本上解決我們的問題。
原因是這樣的:
小A的需求是整體優化工廠類和各個實現類的入參、出參,優化內部邏輯,抽取方法。小A的修改導致和我的實現邏輯有比較大的沖突。
但是他的git提交又在我之前提交到了測試環境,導致我無法提交我的代碼,如果要提交就要解決各種沖突。解決沖突就要按照小A的優化邏輯去改,給到測試同學測的有和我自己分支的不一致。難頂啊??紤]到小A的修改暫時不需要提測,上線周期也比較長。
最終的辦法是這樣的
從遠程的測試分支拉取了一個備份分支,刪除遠程的測試分支
把我本地需要測試的分支提交到測試分支,交付測試。
git 重命名遠程分支
1.先重命名本地分支
git branch -m 舊分支名稱 新分支名稱
2.刪除遠程分支
git push --delete origin 舊分支名稱
3.上傳新修改名稱的本地分支
git push origin 新分支名稱
4.修改后的本地分支關聯遠程分支
git branch --set-upstream-to origin/新分支名稱
原文鏈接:https://juejin.cn/post/7104258964732575775
相關推薦
- 2021-12-10 C語言光標信息CONSOLE_CURSOR_INFO類型詳解_C 語言
- 2023-03-13 Python實現柵欄密碼的加密解密方法詳解_python
- 2023-03-28 通知監控NotificationListenerService?onNotificationPost
- 2022-10-22 PyTorch中的CUDA的操作方法_python
- 2022-12-08 python第三方庫easydict的使用實例詳解_python
- 2022-05-11 在?.NET?平臺使用?ReflectionDynamicObject?優化反射調用的代碼詳解_實用
- 2023-12-07 com.mongodb.MongoSocketOpenException: Exception op
- 2023-03-25 Rust你不認識的所有權_Rust語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支