Close

Opções e exemplos de estratégias do Git Merge

Quando uma parte do trabalho for concluída, testada e estiver pronta para ser mesclada de volta à linha principal de desenvolvimento, a equipe vai ter que fazer algumas escolhas de política. Quais são as opções de estratégia de mesclagem disponíveis? Neste artigo vamos examinar as possibilidades e oferecer algumas observações sobre como a Atlassian funciona. Esperamos que no final você tenha as ferramentas para decidir o que funciona melhor para a equipe.


Estratégias para Git merge


Uma mesclagem ocorre ao combinar duas ramificações. O Git vai pegar dois (ou mais) indicadores de confirmação e vai tentar encontrar uma confirmação base em comum entre eles. O Git tem diversos métodos diferentes para encontrar uma confirmação base, estes métodos são chamados de "estratégias de mesclagem". Depois que o Git encontrar uma confirmação base em comum, ele vai criar uma nova "confirmação de mesclagem" que vai combinar as mudanças das confirmações de mesclagem específicas. Tecnicamente, uma confirmação de mesclagem é uma confirmação regular que tem duas confirmações mãe.

Mesclar gif

O git merge vai selecionar por conta própria a estratégia de mesclagem, a menos que ela tenha sido especificada. Os comandos git merge e git pull podem ser transmitidos com uma opção (estratégia) -s. A opção -s pode ser anexada com o nome da estratégia de mesclagem escolhida. Se não tiver sido especificada, o Git vai selecionar a estratégia de mesclagem mais adequada com base nas ramificações informadas. A lista a seguir informa as estratégias de mesclagem disponíveis.

Janela do console
Material relacionado

Log avançado do Git

Logotipo do Bitbucket
VER SOLUÇÃO

Aprenda a usar o Git com o Bitbucket Cloud

Recursive

git merge -s recursive branch1 branch2

Ela opera em dois heads. Recursive é a estratégia de mesclagem padrão ao empurrar ou mesclar uma ramificação. Além disso, ela pode detectar e manipular mesclagens envolvendo renomeações, mas, no momento, não pode fazer uso de cópias detectadas. É a estratégia de mesclagem padrão ao empurrar ou mesclar uma ramificação.

Resolver

git merge -s resolve branch1 branch2

Ela apenas pode resolver dois heads usando um algoritmo de mesclagem de 3 vias. Ela tenta detectar com cuidado as ambiguidades da mesclagem cruzada e é considerada segura e rápida.

Octopus

git merge -s octopus branch1 branch2 branch3 branchN

É a estratégia de mesclagem padrão para mais de dois heads. Quando mais de uma ramificação é transmitida, o octopus é acionado. Se a mesclagem tiver conflitos que precisam de resolução manual, o octopus vai recusar a tentativa de mesclagem. Ela é usada na maioria das vezes para agrupar heads semelhantes de ramificação de função.

Ours

git merge -s ours branch1 branch2 branchN

A estratégia Ours opera em diversos números N de ramificações. O resultado da mesclagem de saída sempre é o do HEAD da ramificação atual. O termo "ours" implica a preferência, ignorando todas as mudanças de todas as outras ramificações. Ela deve ser usada para combinar o histórico de ramificações semelhantes de funções.

Subtree

git merge -s subtree branchA branchB

É uma extensão da estratégia recursiva. Ao mesclar A e B, se B for uma subárvore filha de A, B vai ser primeiro atualizado para refletir a estrutura de árvore de A. Esta atualização também é realizada à árvore ancestral comum compartilhada entre A e B.

Tipos de estratégia de Git Merge


Mesclagens explícitas

As mesclagens explícitas são o tipo padrão de mesclagem. São "explícitas" porque criam uma nova confirmação de mesclagem. Isto altera o histórico de confirmações e mostra, com clareza, onde uma mesclagem foi executada. O conteúdo da confirmação de mesclagem também é explícito pelo fato de mostrar quais confirmações foram mães da confirmação de mesclagem. Algumas equipes evitam as mesclagens explícitas, porque elas adicionariam "ruído" ao histórico do projeto.

mesclagem implícita por rebase ou mesclagem de avanço rápido

Squash na mesclagem, na maioria da vezes sem mesclagem explícita

Opções de estratégia de Git Merge Recursive


A estratégia "recursive" apresentada acima tem seu próprio subconjunto de opções adicionais de operação.

ours

Não confundir com a estratégia de mesclagem "ours". Esta opção entra em conflito por ser resolvida de forma automática e limpa, favorecendo a versão "our". As mudanças do lado "theirs" são incorporadas de forma automática se não estiverem em conflito.

theirs

Oposto da estratégia "ours". A opção "theirs" favorece a árvore de mesclagem externa na resolução de conflitos.

patience

Esta opção utiliza tempo extra para evitar mesclagens incorretas em linhas de correspondência sem importância. Ela é mais bem utilizada quando as ramificações a serem mescladas são muito divergentes.

diff-algorithim
ignore-*

    ignore-space-change
    ignore-all-space
    ignore-space-at-eol
    ignore-cr-at-eol

Um conjunto de opções que visa caracteres de espaço em branco. Qualquer linha correspondente ao subconjunto da opção transmitida vai ser ignorada.

renormalize

Esta opção executa check-out e check-in em todas as árvores git ao resolver uma mesclagem em três vias. Essa opção deve ser usada com ramificações de mesclagem com estados de checkin/checkout diferentes.

no-normalize

Desativa a opção renormalize. Essa ação substitui a variável de configuração merge.renormalize.

no-renames

Esta opção vai ignorar arquivos renomeados durante a mesclagem.

find-renames=n

Este é o comportamento padrão. A mesclagem recursiva vai honrar as renomeações de arquivo. O parâmetro n pode ser usado para transmitir um limite para similaridade da renomeação. O valor padrão n é 100%.

subtree

Esta opção é derivada da estratégia "subtree". Enquanto a estratégia opera em duas árvores e modifica como fazer com que correspondam em um ancestral compartilhado, esta opção opera nos metadados do caminho da árvore para este fim.

Política de Git Merge


A Atlassian prefere usar mesclagens explícitas. O motivo é muito simples: as mesclagens explícitas oferecem ótima rastreabilidade e contexto das funções sendo mescladas. É recomendado fazer um rebase de limpeza do histórico antes de compartilhar uma ramificação de funções para revisão, porém, isso não muda a política, apenas a amplia.


Compartilhar este artigo

Leitura recomendada

Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.

Pessoas colaborando usando uma parede cheia de ferramentas

Blog do Bitbucket

Ilustração do DevOps

Caminho de aprendizagem de DevOps

Demonstrações de funções no Demo Den com parceiros da Atlassian

Como o Bitbucket Cloud funciona com o Atlassian Open DevOps

Inscreva-se para receber a newsletter de DevOps

Thank you for signing up