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 rebase
subcomando 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 rebase
subcomando 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 topic
costumava ser, mas aparecendo enraizada na parte superior do ramo de integração. Esse novo ramo ainda é chamado topic
pelo GIT, para que a referência antiga seja descartada. Rotulo informalmente topic-0
o estado original do seu ramo topic-1
e assim por diante em várias refatorações.
Aqui está a minha sugestão para o seu topic
ramo:
(Etapa opcional) Você reorganiza interativamente a ramificação do tópico topic
em seu ponto de ramificação (consulte a --fixup
opção paracommit
e as opções -i
e ), 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 .--autosquash
rebase
topic-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-2
um 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-1
e topic-2
que 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.