Vindo de mercurial, eu uso ramos para organizar recursos. Naturalmente, também quero ver esse fluxo de trabalho na minha história.
Comecei meu novo projeto usando git e terminei meu primeiro recurso. Ao mesclar o recurso, percebi que o git usa o avanço rápido, ou seja, aplica minhas alterações diretamente ao ramo principal, se possível, e esquece sobre o meu ramo.
Então, para pensar no futuro: sou o único a trabalhar neste projeto. Se eu usar a abordagem padrão do git (mesclagem rápida), meu histórico resultará em um ramo principal gigante. Ninguém sabe que usei um ramo separado para cada recurso, porque no final terei apenas esse ramo mestre gigante. Isso não parecerá pouco profissional?
Por esse raciocínio, não quero mesclar rapidamente e não consigo entender por que é o padrão. O que há de tão bom nisso?
fonte
no-ff
' com seus "pontos de verificação confirmados" que quebram a bissetriz ou a culpa.-no-ff
raramente é uma boa ideia, mas ainda pode ajudar a manter um histórico interno do recurso enquanto grava apenas um commit no ramo principal. Isso faz sentido para o longo histórico de recursos, quando você mescla de tempos em tempos sua progressão no ramo principal.Respostas:
A mesclagem de avanço rápido faz sentido para ramificações de vida curta, mas em um histórico mais complexo , a mesclagem sem avanço rápido pode facilitar a compreensão do histórico e reverter um grupo de confirmações.
Aviso : O avanço rápido não tem efeitos colaterais potenciais. Revise https://sandofsky.com/blog/git-workflow.html , evite o 'no-ff' com seus "pontos de verificação confirmados" que quebram a bissetriz ou a culpa e considere cuidadosamente se deve ser sua abordagem padrão
master
.(De nvie.com , Vincent Driessen , poste " Um modelo de ramificação Git bem-sucedido ")
Jakub Narębski também menciona a configuração
merge.ff
:O avanço rápido é o padrão porque:
Mas se você antecipar um fluxo de trabalho iterativo em uma ramificação de tópico / recurso (por exemplo, mesclo, voltarei a essa ramificação de recurso e adicionarei mais confirmações), será útil incluir apenas a mesclagem na ramificação principal, em vez de todo o intermediário confirma a ramificação do recurso.
Nesse caso, você pode acabar configurando esse tipo de arquivo de configuração :
O PO acrescenta nos comentários:
Jefromi responde:
De maneira mais geral, eu adiciono:
Na verdade, quando você considera o modelo de ramificação do Mercurial, ele é basicamente um ramo por repositório (mesmo que você possa criar cabeças anônimas, marcadores e até ramificações nomeadas )
Consulte "Git e Mercurial - Compare e Contraste" .
fonte
feature
ramo a um repositório público, você pode restaurá-lomaster
quantas vezes quiser. Veja stackoverflow.com/questions/5250817/…feature
ramificação de volta aomaster
que torna a dita história linear ou não. Uma mesclagem simples de avanço rápido a tornará linear. O que faz sentido se você limpou o histórico dessefeature
ramo antes da mesclagem de avanço rápido, deixando apenas confirmações significativas, conforme mencionado em stackoverflow.com/questions/7425541/… .Deixe-me expandir um pouco em um VonC 's resposta muito abrangente :
Primeiro, se bem me lembro, o fato de o Git por padrão não criar confirmações de mesclagem no caso de avanço rápido veio da consideração de "repositórios iguais" de ramificação única, onde a atração mútua é usada para sincronizar esses dois repositórios (um você pode encontrar o primeiro exemplo na documentação da maioria dos usuários, incluindo "O Manual do Usuário do Git" e "Controle de versão por exemplo"). Nesse caso, você não usa pull para mesclar ramificação totalmente realizada, usa-o para acompanhar outros trabalhos. Você não quer ter fatos efêmeros e sem importância quando faz uma sincronização salva e armazenada no repositório, salva para o futuro.
Observe que a utilidade das ramificações de recursos e de ter várias ramificações no repositório único veio apenas mais tarde, com um uso mais disseminado do VCS com bom suporte de mesclagem e com a tentativa de vários fluxos de trabalho baseados em mesclagem. É por isso que, por exemplo, o Mercurial originalmente suportava apenas uma ramificação por repositório (além de dicas anônimas para rastrear ramificações remotas), como visto nas revisões anteriores do "Mercurial: The Definitive Guide".
Em segundo lugar, ao seguir as melhores práticas de usar ramos de novos recursos , ou seja, que as sucursais recurso deve tudo início a partir da versão estável (geralmente de última release), para ser capaz de cherry-pick and selecionar quais recursos para incluir selecionando quais ramos de novos recursos para mesclar, você geralmente não estão em uma situação de avanço rápido ... o que torna esse problema discutível. Você precisa se preocupar em criar uma mesclagem verdadeira e não avançar rapidamente ao mesclar uma primeira ramificação (supondo que você não coloque alterações de confirmação única diretamente no 'master'); todas as outras mesclagens posteriores estão, obviamente, em situações de não avanço rápido.
HTH
fonte