Git: corrigindo um erro que afeta dois ramos

16

Estou baseando meu repositório Git em um modelo de ramificação bem-sucedido do Git e queria saber o que acontece se você tiver esta situação:

insira a descrição da imagem aqui

Digamos que eu esteja desenvolvendo dois ramos de recurso A e B, e B requer código de A. O nó X introduz um erro no recurso A que afeta o ramo B, mas isso não é detectado no nó Y, onde os recursos A e B foram mesclados e O teste foi realizado antes de se ramificar novamente e trabalhar na próxima iteração.

Como resultado, o bug é encontrado no nó Z pelas pessoas que trabalham no recurso B. Nesse estágio, é decidido que uma correção de bug é necessária. Essa correção deve ser aplicada aos dois recursos, pois as pessoas que trabalham no recurso A também precisam do bug corrigido, pois faz parte do recurso.

Uma ramificação de correção de bug deve ser criada a partir do nó mais recente do recurso A (aquele que ramifica do nó Y) e depois mesclada com o recurso A? Após o qual os dois recursos são mesclados para desenvolver novamente e testados antes de se ramificarem?

O problema é que é necessário que ambas as ramificações sejam mescladas para corrigir o problema. Como o recurso B não toca no código no recurso A, existe uma maneira de alterar o histórico no nó Y implementando a correção e ainda permitindo que a ramificação do recurso B permaneça inalterada e ainda possua o código fixo do recurso A?

Ligeiramente relacionado: Convenção de ramificação de erros do Git

Aram Kocharyan
fonte
6
Você não pode simplesmente corrigir o bug no ramo 'develop' e depois mesclá-lo no recurso A e no recurso B?
tdammers
Hmm, parece que seria melhor. Pode haver conflitos de mesclagem no recurso A, mas acho que é inevitável aqui.
Aram Kocharyan
Se você não fez nenhum desenvolvimento adicional na ramificação 'development' e a correção de bug não se sobrepõe a nenhuma alteração na ramificação 'feature A', não haverá conflitos.
tdammers

Respostas:

24

Use uma confirmação distinta para corrigir o erro em uma ramificação e, em seguida, escolha essa confirmação na outra ramificação.

Christian Palmstierna
fonte
Isso funciona bem, aplausos.
Aram Kocharyan
5

Indiscutivelmente, não há nenhum erro em A ou X. Corrija o erro no ramo B onde ele foi encontrado. A correção será propagada para X e A no curso normal dos eventos.

Kevin Cline
fonte
Não obrigado, que também é viável, desde que o bug não afeta recurso A.
Aram Kocharyan
0

Embora não seja um fluxo de trabalho popular git, um fluxo de trabalho popular no Mercurial seria atualizar para revisão X, corrigir o bug (como X2 ) e refazer a mesclagem Y(o que seria um par de mesclagens no Mercurial).

De fato, esse fluxo de trabalho é mais fácil, gitpois, depois que todos mudaram Ypara Y2 , os árbitros para o original Yserão perdidos e, eventualmente, serão coletados como lixo. Em hgque você teria que retirar manualmente esses commits para arrumar seu repositório.

Mark Booth
fonte