Mesclagem squash e de estratégias

Azure DevOps Services | | Azure DevOps Server 2022 Azure DevOps Server 2020 | Azure DevOps Server | 2019 TFS 2018

Ao concluir uma solicitação de pull, você mescla o branch de tópicos em seu branch padrão, geralmente main. Essa mesclagem adiciona as confirmações do branch de tópicos ao branch principal e cria uma confirmação de mesclagem para reconciliar quaisquer conflitos entre o branch padrão e o branch de tópicos. Os comentários e a discussão na solicitação de pull dão contexto adicional para as alterações feitas no branch de tópicos.

Exemplo de uma mesclagem regular de uma solicitação de pull.

O histórico de confirmação em seu main branch (ou outro branch padrão) não segue uma linha reta, devido ao histórico de branch de tópicos relacionado. À medida que um projeto aumenta, o número de branches de tópicos trabalhados ao mesmo tempo aumenta, tornando o histórico de branch padrão cada vez mais difícil de seguir.

O branch padrão é uma representação precisa do histórico de cada branch de tópico, mas é difícil de usar para responder a perguntas mais amplas sobre o desenvolvimento do seu projeto.

Mesclagem de squash

A mesclagem de squash é uma opção de mesclagem que permite que você condense o histórico git de branches de tópico quando você conclui uma solicitação de pull. Em vez de cada confirmação no branch de tópico que está sendo adicionado ao histórico do branch padrão, uma mesclagem de squash adiciona todas as alterações de arquivo a uma única nova confirmação no branch padrão.

Diagrama da mesclagem de squash em solicitações de pull no Azure Repos.

Uma maneira simples de pensar sobre isso é que a mesclagem de squash fornece apenas as alterações de arquivo e uma mesclagem regular fornece as alterações de arquivo e o histórico de confirmação.

Como uma mesclagem de squash é útil?

A mesclagem de squash mantém seus históricos de branch padrão limpos e fáceis de seguir sem exigir nenhuma alteração de fluxo de trabalho em sua equipe. Os colaboradores do branch de tópicos funcionam como desejam no branch de tópicos e os branches padrão mantêm um histórico linear por meio do uso de mesclagens de squash. O histórico de confirmação de um main branch atualizado com mesclagens de squash tem uma confirmação para cada branch mesclado. Você pode percorrer esse histórico para descobrir exatamente quando o trabalho foi feito.

Considerações ao mesclar squash

A mesclagem de squash condensa o histórico de alterações em seu branch padrão, portanto, é importante trabalhar com sua equipe para decidir quando você deve mesclar ou quando deseja manter o histórico de confirmação completo de um branch de tópicos. Ao mesclar squash, é uma boa prática excluir o branch de origem. Excluir o branch de origem evita confusão, pois o branch de tópicos em si não tem uma confirmação mesclando-o no branch padrão.

Concluir solicitações de pull com mesclagem de squash

Você pode optar por mesclagem de squash ao concluir uma solicitação de pull em Azure Repos.

Escolha a confirmação de Squash em Tipo de mesclagem na caixa de diálogo Solicitação de pull Completa para mesclar o branch de tópico.

Captura de tela do fechamento de uma solicitação de pull com uma mesclagem de squash em Azure Repos.

Concluir solicitações de pull com mesclagem de squash

Você pode optar por mesclagem de squash ao concluir uma solicitação de pull em Azure Repos.

Escolha alterações de squash ao mesclar na caixa de diálogo Solicitação de pull Completo para mesclar o branch de tópico.

Captura de tela do fechamento de uma solicitação de pull com uma mesclagem de squash em Azure Repos.

Várias bases de mesclagem

A guia Arquivos em uma solicitação de pull detecta as diferenças por uma comparação de três lados. O algoritmo leva em conta a última confirmação no branch de destino, a última confirmação no branch de origem e sua base de mesclagem comum. O algoritmo é um método rápido, econômico e confiável para detectar alterações. Infelizmente, em alguns casos, há mais de uma base verdadeira. Na maioria dos repositórios, essa situação é rara, mas em repositórios grandes com muitos usuários ativos, pode ser comum.

Os seguintes cenários podem causar várias bases:

  • Mesclagens cruzadas entre ramificações diferentes
  • Reutilização ativa de branches de recursos
  • Tratamento de consequências de reversões de ramificação principal
  • Outras manipulações não intuitivas e complicadas com reversões, escolhas de cereja e mesclagens

A detecção de base de várias mesclagens faz parte da conscientização de segurança. Se houver várias bases de mesclagem, o algoritmo file-diff para a interface do usuário poderá não detectar corretamente as alterações de arquivo, dependendo da base de mesclagem escolhida. Se os arquivos na solicitação de pull tiverem versões diferentes entre as bases de mesclagem, ocorrerá um aviso base de várias mesclagens.

Potenciais riscos de segurança de mesclagem de várias bases

  • Um usuário mal-intencionado pode abusar do algoritmo de interface do usuário para confirmar alterações mal-intencionadas que não estão presentes na PR.
  • Se as alterações propostas na PR já estiverem no branch de destino, elas serão exibidas na guia Arquivos , mas podem não disparar políticas de branch mapeadas para alterações de pasta.
  • Dois conjuntos de alterações nos mesmos arquivos de várias bases de mesclagem podem não estar presentes na PR. Esse caso pode criar lacunas lógicas traiçoeiras.

Como resolver o problema de várias bases de mesclagem

Ter várias bases de mesclagem não é necessariamente ruim, mas você deve verificar duas vezes se está tudo bem. Para se livrar de várias bases de mesclagem, amarre os branches a um único ancestral comum rebasing seu branch no destino ou mesclando o destino em seu branch. Essas ações se livram da mensagem de aviso e ajudam você a verificar se as alterações reais estão bem.

Uma abordagem é redefinir suavemente e esconder seu progresso antes de reativar ou mesclar. Em seguida, você pode criar um novo branch ou rebasear um vazio e aplicar suas alterações de um ponto claro. Esse processo pode exigir um push de força para o remoto se suas alterações já estiverem lá.

Como evitar o problema de várias bases de mesclagem

Aqui estão dicas gerais para evitar o problema de base de mesclagem múltipla:

  • Ao preparar uma solicitação de pull, crie branches de recursos das versões mais recentes do branch principal ou de lançamento.
  • Evite criar branches que não se originem diretamente de ramificações estáveis do repositório, a menos que seja necessário.

O que fazer se o problema de várias bases de mesclagem reaparecer

Em grandes repositórios com muitos colaboradores ativos, esse problema pode ser especialmente inconveniente. Mesmo se você se livrar de várias bases por meio de mesclagem, a situação poderá reaparecer. Se alguém fechar uma solicitação de pull de longa data, isso poderá recriar a situação. Embora as políticas de build e os testes estejam em execução, você não tem meios para concluir a solicitação de pull. Redefinir e iniciar um novo branch pode ajudar. Se nada for alterado, suas alterações provavelmente serão claras, mesmo que a situação se repita.

Próximas etapas