Uma coisa importante que o git-flow pretendia abordar foi a capacidade de raciocinar sobre o papel de um determinado ramo e o que ele ramifica e se funde.
Idealmente, todas as ramificações retornam à linha de código da qual foram mescladas. Isso normalmente é uma mesclagem da linha principal (no fluxo git, isso é dev
). O recurso ramifica ramificação e mesclagem do dev, libera ramificação ramificação e mesclagem do dev (com uma mesclagem adicional para master
). Hot fixes ramificam e mesclam do master (com essa mesclagem adicional de volta ao dev).
Cada linha de código se ramifica e se funde de volta ao pai. Uma linha de código pode extrair código de outras linhas de código a qualquer momento, se necessário.
Se o ramo de um ramo de recurso é um "Quero explorar essa maneira de corrigir um problema nesse ramo de recurso" - perfeitamente bem. Ramifica a partir da ramificação do recurso, confirma um pouco de código e mescla de volta à ramificação do recurso (ou é descartada).
- ramificar do recurso
- explorar a ideia
- mesclar para destacar
O que você deseja evitar, no entanto, é algo parecido com:
- ramificação do recurso necessário
- trabalhar no código
- mesclar do dev quando o recurso necessário estiver concluído
- verificar a funcionalidade (e confirmações adicionais) na ramificação do recurso
- mesclar para dev
A razão é que o começo e o fim não coincidem - torna um pouco mais difícil entender o que é e o que foi. Não é impossível, mas apenas leva um pouco mais de tempo para alguém entender seu papel.
No entanto, se esse é um novo recurso que depende do código que ainda não foi encontrado no dev, o fluxo deve ser:
- ramo do dev
- mesclar a partir do recurso necessário
- trabalhar no código
- mesclar do dev quando o recurso necessário estiver concluído
- verificar a funcionalidade (e confirmações adicionais) na ramificação do recurso
- mesclar para dev
Observe que isso começa com um ramo do dev e termina com uma mesclagem para o dev.
Tudo isso dito, provavelmente a melhor coisa a fazer é evitar a mesclagem de um recurso para outro. Ramifique o recurso, faça as preliminares necessárias ... e aguarde.
- ramo do dev
- trabalhar no código
- mesclar do dev quando o recurso necessário estiver concluído
- verificar a funcionalidade (e confirmações adicionais) na ramificação do recurso
- mesclar para dev
Isso fornece o conjunto mais estável de ramificações e código.
Algo a considerar em trabalhos futuros seria ter um recurso para publicar as interfaces necessárias para interoperabilidade com outros recursos - mesmo que o código de implementação não esteja completo. Isso seria mesclado ao dev, e o recurso necessário poderia funcionar com essas interfaces, assim como o recurso futuro. Isso provavelmente permitiria que o recurso futuro progredisse mais (codificando contra as interfaces, testando contra stubbs que implementam as interfaces) do que faria se tivesse que esperar pelo recurso necessário mesclar para dev.