Na verdade, existe uma terceira possibilidade - e provavelmente muitas outras, uma vez que o GIT é mais uma implementação de uma estrutura de SCM do que uma implementação de uma metodologia de SCM. Essa terceira possibilidade é baseada rebase.
O rebasesubcomando GIT pega uma série de confirmações (normalmente do ponto de ramificação até a ponta do tópico topic) e as reproduz em outro lugar (normalmente na ponta do ramo de integração, por exemplo master). O rebasesubcomando produz novas confirmações, o que oferece a oportunidade de reorganizar as confirmações de uma forma que é mais fácil de revisar. Isso gera uma nova série de consolidação, semelhante ao que topiccostumava ser, mas aparecendo enraizada na parte superior do ramo de integração. Esse novo ramo ainda é chamado topicpelo GIT, para que a referência antiga seja descartada. Rotulo informalmente topic-0o estado original do seu ramo topic-1e assim por diante em várias refatorações.
Aqui está a minha sugestão para o seu topicramo:
(Etapa opcional) Você reorganiza interativamente a ramificação do tópico topicem seu ponto de ramificação (consulte a --fixupopção paracommit e as opções -ie ), o que lhe dá a oportunidade de reescrever seus commits de uma maneira que seja mais fácil de revisar. Isso resulta em uma ramificação .--autosquashrebasetopic-1
Você rebase sua ramificação de tópico na parte superior de sua ramificação de integração, é semelhante a uma mesclagem, mas "não polui" o histórico com uma mesclagem que é meramente um artefato de engenharia de software. Isso resulta em uma ramificação topic-2.
Mandar topic-2 a um colega de equipe que o analise com a ponta do master.
E se topic-2 estiver tudo bem, mescle-o para dominar.
NOTA As ramificações - nas quais ramificação se refere à árvore de confirmação - serão chamadas pelo GIT da mesma forma; portanto, no final do processo, apenas a ramificação terá topic-2um nome no GIT.
Prós:
- Nenhum código obsoleto em revisão.
- Não há comentários espúrios de "fusões estrangeiras" (o fenômeno que você descreveu em 1º).
- Oportunidade de reescrever confirmações de maneira limpa.
Contras:
- Em vez de um ramo
topic-0, há três ramos artefatos topic-0, topic-1e topic-2que são criados na árvore de cometer. (Embora a qualquer momento, apenas um deles tenha um nome no GIT.)
No seu 1º cenário «se alguém mesclar algo entre" 1 ". e "2." »refere-se ao tempo decorrido entre a criação do ponto de ramificação e o horário em que você decide mesclar. Nesse cenário «se alguém mesclar algo entre" 1 ". e "2." »refere-se ao tempo decorrido entre o rebase e a mesclagem, que geralmente é muito curto. Assim, no cenário que forneço, você pode «bloquear» omaster ramificação pelo tempo da mesclagem sem perturbar significativamente o seu fluxo de trabalho, enquanto isso é impraticável no 1º cenário.
Se você estiver fazendo revisões sistemáticas de código, provavelmente é uma boa idéia reorganizar as confirmações de maneira adequada (etapa opcional).
Gerenciar os artefatos de ramificação intermediária apenas apresenta uma dificuldade se você os compartilhar entre repositórios.