利用go語(yǔ)言實(shí)現(xiàn)Git?重命名遠(yuǎn)程分支??
問(wèn)題描述
小A和我并行開(kāi)發(fā),他在優(yōu)化之前的代碼邏輯,我在開(kāi)發(fā)新功能。
小A在我之前把代碼提交到了測(cè)試分支,我想提交我的新功能代碼到測(cè)試分支時(shí)發(fā)現(xiàn)巨多沖突。
首先解決沖突浪費(fèi)時(shí)間,我的新功能代碼每次提測(cè)都需要解決沖突。
再者我再測(cè)試分支解決沖突,只能按照小A優(yōu)化后的代碼邏輯的去解決,和我自己的分支邏輯并不一致。
交付給測(cè)試同學(xué)測(cè)的代碼,和我自己分支的代碼不一致,這種測(cè)試是沒(méi)有意義的。
反思出問(wèn)題的原因
- 工廠模式使用的不合理
- 任務(wù)分配的不合理
代碼層面
因?yàn)槭枪S設(shè)計(jì)模式,我負(fù)責(zé)的實(shí)現(xiàn)類(lèi)A和他的實(shí)現(xiàn)類(lèi)B雖然沒(méi)有直接關(guān)系。但是因?yàn)樗薷牧斯S類(lèi)中的方法定義。
比如之前工廠類(lèi)中的接口是這么定義的
package factory
type xxx interface {
GetXxxx(ctx context.Context, req aaa.aa) (res bbb.bb, err error)
}但是小A修改了工廠類(lèi)中的接口定義:
package factory
type xxx interface {
GetXxxx(ctx context.Context, req ccc.cc) (res ddd.dd, err error)
}這樣就導(dǎo)致了一個(gè)問(wèn)題:
我想合并我的代碼到測(cè)試分支也必須將我的實(shí)現(xiàn)類(lèi)A修改傳參類(lèi)型和返回類(lèi)型。
但是我們都在不同的分支上開(kāi)發(fā),我是沒(méi)有他定義的類(lèi)型ccc.cc,ddd.dd的。
我又不能直接把他定義的ccc.cc,ddd.dd要過(guò)來(lái),在我自己的分支上開(kāi)發(fā),一是因?yàn)樾枨蟛灰恢?,小A的上線周期會(huì)比我長(zhǎng),二是這種操作本身就不規(guī)范。
解決問(wèn)題
從代碼設(shè)計(jì)上優(yōu)化
我們想到的方案是合理使用interface
把工廠類(lèi)中要實(shí)現(xiàn)的接口方法的入?yún)⒑统鰠⒃O(shè)置為interface{}類(lèi)型
package factory
type xxx interface {
GetXxxx(ctx context.Context, req interface{}) (res interface{}, err error)
}這樣就比較容易進(jìn)行擴(kuò)展了。
從git操作上優(yōu)化
但是入?yún)⒑统鰠⒃O(shè)置為interface{}類(lèi)型的辦法并沒(méi)有從根本上解決我們的問(wèn)題。
原因是這樣的:
小A的需求是整體優(yōu)化工廠類(lèi)和各個(gè)實(shí)現(xiàn)類(lèi)的入?yún)?、出參,?yōu)化內(nèi)部邏輯,抽取方法。小A的修改導(dǎo)致和我的實(shí)現(xiàn)邏輯有比較大的沖突。
但是他的git提交又在我之前提交到了測(cè)試環(huán)境,導(dǎo)致我無(wú)法提交我的代碼,如果要提交就要解決各種沖突。解決沖突就要按照小A的優(yōu)化邏輯去改,給到測(cè)試同學(xué)測(cè)的有和我自己分支的不一致。難頂啊??紤]到小A的修改暫時(shí)不需要提測(cè),上線周期也比較長(zhǎng)。
最終的辦法是這樣的
從遠(yuǎn)程的測(cè)試分支拉取了一個(gè)備份分支,刪除遠(yuǎn)程的測(cè)試分支
把我本地需要測(cè)試的分支提交到測(cè)試分支,交付測(cè)試。
git 重命名遠(yuǎn)程分支
1.先重命名本地分支
git branch -m 舊分支名稱(chēng) 新分支名稱(chēng)
2.刪除遠(yuǎn)程分支
git push --delete origin 舊分支名稱(chēng)
3.上傳新修改名稱(chēng)的本地分支
git push origin 新分支名稱(chēng)
4.修改后的本地分支關(guān)聯(lián)遠(yuǎn)程分支
git branch --set-upstream-to origin/新分支名稱(chēng)
到此這篇關(guān)于go語(yǔ)言實(shí)現(xiàn)Git 重命名遠(yuǎn)程分支 的文章就介紹到這了,更多相關(guān)go Git 重命名 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go關(guān)鍵字defer的使用和底層實(shí)現(xiàn)
defer是Go語(yǔ)言的關(guān)鍵字,一般用于資源的釋放和異常的捕捉,defer語(yǔ)句后將其后面跟隨的語(yǔ)句進(jìn)行延遲處理,就是說(shuō)在函數(shù)執(zhí)行完畢后再執(zhí)行調(diào)用,也就是return的ret指令之前,本文給大家介紹了Go關(guān)鍵字defer的使用和底層實(shí)現(xiàn),需要的朋友可以參考下2023-11-11
使用docker構(gòu)建golang線上部署環(huán)境的步驟詳解
這篇文章主要介紹了使用docker構(gòu)建golang線上部署環(huán)境的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
一文詳解Go語(yǔ)言中對(duì)象池的正確打開(kāi)方式
對(duì)象池是一種設(shè)計(jì)模式,它維護(hù)一組已經(jīng)創(chuàng)建好的對(duì)象,當(dāng)需要使用對(duì)象時(shí),直接從對(duì)象池中獲取,使用完畢后再放回對(duì)象池,而不是頻繁地創(chuàng)建和銷(xiāo)毀對(duì)象,下面我們就來(lái)看看Go語(yǔ)言中對(duì)象池的具體使用吧2025-02-02
goland配置自動(dòng)注釋的實(shí)現(xiàn)
本文主要介紹了goland配置自動(dòng)注釋的實(shí)現(xiàn),文中通過(guò)圖文示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
使用?gomonkey?Mock?函數(shù)及方法示例詳解
在 Golang 語(yǔ)言中,寫(xiě)單元測(cè)試的時(shí)候,不可避免的會(huì)涉及到對(duì)其他函數(shù)及方法的 Mock,即在假設(shè)其他函數(shù)及方法響應(yīng)預(yù)期結(jié)果的同時(shí),校驗(yàn)被測(cè)函數(shù)的響應(yīng)是否符合預(yù)期,這篇文章主要介紹了使用?gomonkey?Mock?函數(shù)及方法,需要的朋友可以參考下2022-06-06

