A capacidade de mesclagem fácil do git é um de seus pontos fortes. Durante uma mesclagem, o Git usa fusão de avanço rápido quando percebe que o chefe do ramo atual é um ancestral do Commit que você está tentando se fundir. Em uma fusão rápida, não há um novo compromisso. Git apenas move o ponteiro. Se esse comportamento não for desejável, você pode usar a bandeira no-ff para criar uma nova confirmação para a mesclagem.
Como a mesclagem fica com e sem avanço rápido
Depois de um avanço rápido, seu histórico de git ficará assim:
C0 -> C1 -> C2-> C3
Para o mesmo número de começos, aqui está uma história de mesclagem sem avanço rápido:
No primeiro caso, não há indicação de que houve alguma ramificação. No segundo caso, a história está mostrando um compromisso C4 para indicar onde ocorreu a mesclagem.
Caminhando por um exemplo
Você criará um repositório Git, criará um ramo e depois experimentará as mescladas com e sem avanço rápido.
Primeiro, você pode criar o repositório Git com as seguintes etapas:
$ mkdir my_projectAgora vamos criar um ramo chamado recursos e cometer algumas mudanças:
Recursos de ramificação $ gitVamos voltar ao ramo Master Branch e Merge Recursos Branch nele:
$ git checkout mestre
Recursos de fusão de $ git
Saída:
Atualizando 08076FB… 9EE88EBSe você verificar o histórico, você verá:
$ git log --oneelineEntão, todos os compromissos do ramo de recursos estão no ramo principal agora. Se você continuar fazendo alterações para dominar, não há como saber quando a filial dos recursos foi mesclada.
Repita a seção 1 para uma nova pasta.
Em seguida, tente uma fusão sem avançar rapidamente:
$ git checkout mestre
Recurso $ git mescla-no-ff
Ele abrirá o seguinte no editor de texto padrão do seu git:
Merge Branch 'Recursos'
# Por favor, insira uma mensagem de confirmação para explicar por que essa mesclagem é necessária,
# Especialmente se ele mesclará um upstream atualizado em uma filial de tópicos.
#
# Linhas começando com '#' serão ignoradas e uma mensagem vazia aborta
# o compromisso.
Modifique os comentários. Nesse caso, você pode apenas adicionar "C4:" Antes de "Ramo de Merge 'Recursos'". A saída deve ficar assim:
Merge feita pela estratégia 'recursiva'.Agora, se você verificar o histórico, deve parecer o seguinte:
$ git log --oneelineVocê pode ver que, embora tenha exatamente as mesmas alterações, esta versão do Merge tem o comprometimento C4 extra que significa a fusão de Recursos Branch em Master.
Conclusão
A bandeira Git Merge No-FF ajuda a criar um histórico mais legível. Ele permite que você coloque tags que mostrem claramente onde as mesclagem ocorreram. Pode economizar tempo e esforço durante a depuração.