Git

Opção Git Merge -no-ff

Opção Git Merge -no-ff

Compreendendo a opção Git Merge no-ff

A facilidade de mesclagem do git é um de seus pontos fortes. Durante um merge, o git usa o fast-forward merge quando percebe que o HEAD do branch atual é um ancestral do commit que você está tentando fundir. Em uma fusão de avanço rápido, não há nenhum novo commit. Git apenas move o ponteiro. Se este comportamento não for desejável, você pode usar o sinalizador no-ff para criar um novo commit para a fusão.

Como o Merge fica com e sem o Fast-Forward

Depois de um avanço rápido, seu histórico do git ficará assim:

C0 -> C1 -> C2-> C3

Para o mesmo número de confirmações, aqui está um histórico de mesclagem sem avanço rápido:

No primeiro caso, não há indicação de que houve qualquer ramificação. No segundo caso, o histórico mostra um commit C4 para indicar onde ocorreu a fusão.

Percorrendo um exemplo

Você criará um repositório git, criará um branch e então tentará mesclar com e sem fast-forward.

Seção 1: configuração

Primeiro, você pode criar o repositório git com as seguintes etapas:

$ mkdir my_project
$ cd my_project
$ git init
$ touch a.TXT
$ git add -A
$ git commit -m "C0: Adicionando um.TXT"

Agora vamos criar um branch chamado features e fazer algumas alterações:

$ git branch features
$ git checkout features
$ touch b.TXT
$ git add -A
$ git commit -m "C1: Adicionando b.TXT"
$ touch c.TXT
$ git add -A
$ git commit -m "C2: Adicionando c.TXT"
$ touch d.TXT
$ git add -A
$ git commit -m "C3: Adicionando d.TXT"

Seção 2: Mesclar com Fast-Forwarding

Vamos voltar ao branch master e mesclar o branch de recursos nele:

$ git checkout master
$ git merge features

Resultado:

Atualizando 08076fb… 9ee88eb
Avanço rápido
b.txt | 0
c.txt | 0
d.txt | 0
3 arquivos alterados, 0 inserções (+), 0 exclusões (-)
modo de criação 100644 b.TXT
modo de criação 100644 c.TXT
modo de criação 100644 d.TXT

Se você verificar o histórico, verá:

$ git log --oneline
9ee88eb C3: Adicionando d.TXT
c72b92c C2: Adicionando c.TXT
2e4039e C1: Adicionando b.TXT
08076fb C0: Adicionando um.TXT

Então, todos os commits do branch de recursos estão no branch master agora. Se você continuar fazendo alterações no master, não há como saber quando o branch de recursos foi incorporado a ele.

Seção 3: sem avanço rápido

Repita a Seção 1 para uma nova pasta.

Em seguida, tente mesclar sem avanço rápido:

$ git checkout master
$ git merge --no-ff feature

Isso abrirá o seguinte no editor de texto padrão do git:

Mesclar 'recursos' do branch
# Por favor, insira uma mensagem de confirmação para explicar por que essa mesclagem é necessária,
# especialmente se mescla um upstream atualizado em um branch de tópico.
#
# Linhas começando com '#' serão ignoradas e uma mensagem vazia será cancelada
# o commit.

Modifique os comentários. Neste caso, você pode apenas adicionar “C4:” antes de “Mesclar 'recursos' do branch”. A saída deve ser semelhante a esta:

Mesclagem feita pela estratégia 'recursiva'.
b.txt | 0
c.txt | 0
d.txt | 0
3 arquivos alterados, 0 inserções (+), 0 exclusões (-)
modo de criação 100644 b.TXT
modo de criação 100644 c.TXT
modo de criação 100644 d.TXT

Agora, se você verificar o histórico, ele deve se parecer com o seguinte:

$ git log --oneline
e071527 C4: Mesclar 'recursos' de ramificação
bb79c25 C3: Adicionando d.TXT
692 relevantc C2: Adicionando c.TXT
a0df62a C1: Adicionando b.TXT
7575971 C0: Adicionando um.TXT

Você pode ver que mesmo que você tenha exatamente as mesmas mudanças, esta versão de mesclagem tem o commit C4 extra que significa a mesclagem do branch de recursos no master.

Conclusão

O sinalizador git merge no-ff ajuda a criar um histórico mais legível. Ele permite que você coloque tags que mostram claramente onde as mesclagens ocorreram. Isso pode economizar tempo e esforço durante a depuração.

Um estudo mais aprofundado:

Referências:
Vulkan para usuários de Linux
A cada nova geração de placas gráficas, vemos os desenvolvedores de jogos ultrapassarem os limites da fidelidade gráfica e se aproximarem mais do foto...
OpenTTD vs Simutrans
Criar sua própria simulação de transporte pode ser divertido, relaxante e extremamente atraente. É por isso que você precisa ter certeza de experiment...
Tutorial OpenTTD
OpenTTD é um dos jogos de simulação de negócios mais populares que existem. Neste jogo, você precisa criar um maravilhoso negócio de transporte. No en...