Git renomeia branch remoto | Operação irregular, duas linhas de lágrimas para parentes.

Continue a criar, acelere o crescimento! Este é o 8º dia da minha participação no "Nuggets Daily New Plan · June Update Challenge", clique para ver os detalhes do evento

DICAS: A seguinte linguagem de exemplo de código é Go

Descrição do Problema

Xiao A e eu estamos desenvolvendo em paralelo, ele está otimizando a lógica do código antes e eu estou desenvolvendo novas funções.

Xiao A enviou o código para a ramificação de teste antes de mim e encontrei muitos conflitos quando quis enviar meu novo código de função para a ramificação de teste.

Resolver conflitos primeiro é uma perda de tempo, e preciso resolver conflitos toda vez que meu novo código de recurso é testado.

Além disso, quando testo a ramificação para resolver o conflito, só consigo resolvê-lo de acordo com a lógica de código otimizada por Xiao A, o que não é consistente com minha própria lógica de ramificação.

O código entregue aos colegas de teste é inconsistente com o código do meu próprio branch.Esse tipo de teste não tem sentido.

Reflita sobre o que deu errado

  1. Uso irracional do modo de fábrica

  2. Atribuição de tarefas não razoável

nível de código

Por ser o padrão de projeto de fábrica, a classe de implementação A pela qual sou responsável não está diretamente relacionada à sua classe de implementação B. Mas porque ele modificou a definição do método na classe de fábrica.

Por exemplo, a interface na classe de fábrica anterior é definida assim

package factory

type xxx interface {
   GetXxxx(ctx context.Context, req aaa.aa) (res bbb.bb, err error)  
}
复制代码

Mas Xiao A modificou a definição da interface na classe de fábrica:

package factory

type xxx interface {
   GetXxxx(ctx context.Context, req ccc.cc) (res ddd.dd, err error)  
}
复制代码

Isso leva a um problema:

Se eu quiser mesclar meu código na ramificação de teste, também tenho que modificar o tipo de parâmetro e o tipo de retorno da minha classe de implementação A.

Mas estamos todos desenvolvendo em ramos diferentes, e não tenho o tipo definido por ccc.ccele ddd.dd.

Eu não posso defini-lo diretamente ccc.cc. ddd.ddEu quero vir e desenvolver no meu próprio ramo. Primeiro, por causa de requisitos inconsistentes, o ciclo online de Xiao A será mais longo que o meu. Segundo, esta operação em si não é padronizada.

Resolva o problema

Otimize a partir do design de código:

A solução que pensamos é usar a interface razoavelmente

Defina os parâmetros de entrada e saída do método de interface a ser implementado na classe de fábrica para o interface{}tipo

package factory

type xxx interface {
   GetXxxx(ctx context.Context, req interface{}) (res interface{}, err error)  
}
复制代码

Isso facilita a expansão.

Otimize a partir de operações git:

Mas o método de definir os parâmetros de entrada e saída como interface{}tipos não resolveu fundamentalmente nosso problema.

A razão é esta:

O requisito do pequeno A é otimizar os parâmetros de entrada e saída da classe de fábrica e cada classe de implementação como um todo, otimizar a lógica interna e extrair métodos.

A modificação do pequeno A leva a um grande conflito com minha lógica de implementação.

Mas o envio do git dele foi submetido ao ambiente de teste antes de mim, então não pude enviar meu código. Se eu quisesse enviar, teria que resolver vários conflitos. Para resolver o conflito, devemos alterá-lo de acordo com a lógica de otimização de Xiao A, e os testes dados aos alunos do teste são inconsistentes com o meu próprio ramo.

Difícil de superar.

Considerando que a modificação do pequeno A não precisa ser testada por enquanto, o ciclo online também é relativamente longo.

A solução final é esta:

Extraiu um branch de backup do branch de teste remoto

exclua o branch de teste remoto

Envie a ramificação que preciso testar localmente para a ramificação de teste e entregue o teste.

git renomear branch remoto

1. Renomeie a filial local primeiro

git branch -m 旧分支名称  新分支名称
复制代码

2. Exclua a ramificação remota

git push --delete origin 旧分支名称
复制代码

3. Carregue a filial local com o novo nome modificado

git push origin 新分支名称
复制代码

4. A ramificação local modificada está associada à ramificação remota

git branch --set-upstream-to origin/新分支名称
复制代码

Resumir

É legal desenvolver e manter um crematório.

A operação não é padronizada e os familiares estão em prantos.

afinal

Obrigado por ler, e bem-vindos a todos: like, favorito,moeda(focar em)! ! !

8e95dac1fd0b2b1ff51c08757667c47a.gif

Acho que você gosta

Origin juejin.im/post/7104258964732575775
Recomendado
Clasificación