新聞中心
問題描述
小A和我在同時(shí)開發(fā)一個(gè)功能模塊,他在優(yōu)化之前的代碼邏輯,我在開發(fā)新功能。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供南通網(wǎng)站建設(shè)、南通做網(wǎng)站、南通網(wǎng)站設(shè)計(jì)、南通網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、南通企業(yè)網(wǎng)站模板建站服務(wù),10余年南通做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
小A在我之前把代碼提交到了測(cè)試分支,我想提交我的新功能代碼到測(cè)試分支時(shí)發(fā)現(xiàn)巨多沖突,腦袋瞬間就炸了,Boom一聲驚雷響啊。
PS:因?yàn)樾的需求不急,但是改動(dòng)巨大;我的需求很急,馬上要提測(cè),否則就延期扣績(jī)效了,說真的,我著急了,哈哈哈。
分析一下
- 首先解決沖突浪費(fèi)時(shí)間,我的新功能代碼每次提測(cè)到測(cè)試分支都需要解決沖突。
- 我在測(cè)試分支解決沖突,只能按照小A優(yōu)化后的代碼邏輯的去解決,和我自己的分支邏輯并不一致。
- 交付給測(cè)試同學(xué)的測(cè)試分支代碼,和我自己分支的代碼不一致,這種測(cè)試是沒有意義的。
反思出問題的原因
- 工廠模式使用的不合理
- 任務(wù)分配的不合理
代碼層面
TIPS:以下代碼示例語言為Go
因?yàn)槭枪S設(shè)計(jì)模式,我負(fù)責(zé)的實(shí)現(xiàn)類A和他的實(shí)現(xiàn)類B雖然沒有直接關(guān)系。但是因?yàn)樗薷牧斯S類中的方法定義。
比如之前工廠類中的接口是這么定義的
package factory
type xxx interface {
GetXxxx(ctx context.Context, req aaa.aa) (res bbb.bb, err error)
}
但是小A優(yōu)化(修改)了工廠類中的接口定義:
package factory
type xxx interface {
GetXxxx(ctx context.Context, req ccc.cc) (res ddd.dd, err error)
}
這樣就導(dǎo)致了一個(gè)問題:
我想合并我的代碼到測(cè)試分支也必須將我的實(shí)現(xiàn)類像小A一樣,修改傳參類型和返回類型。
但是我們都在不同的分支上開發(fā),我是沒有他定義的類型ccc.cc,ddd.dd的。
我又不能直接把他定義的ccc.cc,ddd.dd要過來,在我自己的分支上開發(fā),一是因?yàn)樾枨蟛灰恢?,小A的上線周期會(huì)比我長(zhǎng);二是這種操作本身就不規(guī)范。
解決問題
1.代碼層面:
我們想到的方案是合理使用interface
工廠類中方法的入?yún)⒑统鰠⒃O(shè)置為interface{}類型
package factory
type xxx interface {
GetXxxx(ctx context.Context, req interface{}) (res interface{}, err error)
}
這樣就比較容易進(jìn)行擴(kuò)展了。
2.Git層面:
方法1的入?yún)⒑统鰠⒃O(shè)置為interface{}類型的方案,并沒有從根本上解決我們的問題。
原因是這樣的:
小A的需求是整體優(yōu)化工廠類和各個(gè)實(shí)現(xiàn)類的入?yún)?、出參,?yōu)化內(nèi)部邏輯,抽取方法。
小A的迭代優(yōu)化修改變動(dòng)很大,導(dǎo)致和我實(shí)現(xiàn)的新需求有比較大的沖突。
但是他的Git分支又在我之前提交到了測(cè)試環(huán)境,導(dǎo)致我無法正常提交我的代碼。
如果我要提交就要解決各種沖突,解決沖突就要按照小A的優(yōu)化邏輯去改,提測(cè)分支和我自己分支的不一致,難頂啊。
考慮到小A的修改暫時(shí)不需要提測(cè),上線周期也比較長(zhǎng)。
最終方案:
最終的解決方案是這樣的:
- 從遠(yuǎn)程的測(cè)試分支拉取了一個(gè)備份分支,刪除小A提交的遠(yuǎn)程測(cè)試分支
- 把我本地需要測(cè)試的分支提交到測(cè)試分支,交付測(cè)試(因?yàn)槲业男枨蠛芗?,而小A的需求并不急)
相關(guān)命令
這波騷操作我也是第一次用,擔(dān)心閃了腰,所以不僅做了備份,也做了筆記,分享給大家:
Git 重命名遠(yuǎn)程分支
1.先重命名本地分支
git branch -m 舊分支名稱 新分支名稱
2.刪除遠(yuǎn)程分支
git push --delete origin 舊分支名稱
3.上傳新修改名稱的本地分支
git push origin 新分支名稱
4.修改后的本地分支關(guān)聯(lián)遠(yuǎn)程分支
git branch --set-upstream-to origin/新分支名稱
本文轉(zhuǎn)載自微信公眾號(hào)「 程序員升級(jí)打怪之旅」,作者「王中陽Go」,可以通過以下二維碼關(guān)注。
轉(zhuǎn)載本文請(qǐng)聯(lián)系「 程序員升級(jí)打怪之旅」公眾號(hào)。
本文名稱:Git操作不規(guī)范,戰(zhàn)友提刀來相見!
URL分享:http://www.5511xx.com/article/cogjgsh.html


咨詢
建站咨詢
