首頁 > 軟體

利用go語言實現Git 重新命名遠端分支  

2022-06-08 18:02:39

問題描述

小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/新分支名稱

到此這篇關於go語言實現Git 重新命名遠端分支  的文章就介紹到這了,更多相關go Git 重新命名 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com