利用go语言实现Git 重命名远程分支  

 更新时间:2022年06月08日 11:12:39   作者:​ 王中阳Go   ​  
这篇文章主要介绍了go语言实现Git 重命名远程分支,文章基于go语言的基础展开Git 重命名远程分支的实现过程,需要的小伙伴可以参考一下,希望对你的学习有所帮助

问题描述

小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 重命名 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go关键字defer的使用和底层实现

    Go关键字defer的使用和底层实现

    defer是Go语言的关键字,一般用于资源的释放和异常的捕捉,defer语句后将其后面跟随的语句进行延迟处理,就是说在函数执行完毕后再执行调用,也就是return的ret指令之前,本文给大家介绍了Go关键字defer的使用和底层实现,需要的朋友可以参考下
    2023-11-11
  • 一文带你读懂Golang sync包之sync.Mutex

    一文带你读懂Golang sync包之sync.Mutex

    sync.Mutex可以说是sync包的核心了, sync.RWMutex, sync.WaitGroup...都依赖于他, 本章我们将带你一文读懂sync.Mutex,快跟随小编一起学习一下吧
    2023-04-04
  • golang利用pprof与go-torch如何做性能分析

    golang利用pprof与go-torch如何做性能分析

    这篇文章主要给大家介绍了关于golang利用pprof与go-torch如何做性能分析的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • golang中"var"与":="的区别解析

    golang中"var"与":="的区别解析

    这篇文章主要介绍了golang中“var”与“:=”的区别,使用var关键字是Go最基本的定义变量方式,有时也会使用到:=来定义变量,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • 使用docker构建golang线上部署环境的步骤详解

    使用docker构建golang线上部署环境的步骤详解

    这篇文章主要介绍了使用docker构建golang线上部署环境的步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • 浅谈golang中的&^位清空操作

    浅谈golang中的&^位清空操作

    这篇文章主要介绍了浅谈golang中的&^位清空操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 一文详解Go语言中对象池的正确打开方式

    一文详解Go语言中对象池的正确打开方式

    对象池是一种设计模式,它维护一组已经创建好的对象,当需要使用对象时,直接从对象池中获取,使用完毕后再放回对象池,而不是频繁地创建和销毁对象,下面我们就来看看Go语言中对象池的具体使用吧
    2025-02-02
  • goland配置自动注释的实现

    goland配置自动注释的实现

    本文主要介绍了goland配置自动注释的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • go设置多个GOPATH的方式

    go设置多个GOPATH的方式

    这篇文章主要介绍了go设置多个GOPATH的方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • 使用 gomonkey Mock 函数及方法示例详解

    使用 gomonkey Mock 函数及方法示例详解

    在 Golang 语言中,写单元测试的时候,不可避免的会涉及到对其他函数及方法的 Mock,即在假设其他函数及方法响应预期结果的同时,校验被测函数的响应是否符合预期,这篇文章主要介绍了使用 gomonkey Mock 函数及方法,需要的朋友可以参考下
    2022-06-06

最新评论