Resolver conflitos de mesclagem

Serviços do Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Visual Studio 2019 | Visual Studio 2022

Dica

Você pode usar a IA para ajudar nas tarefas do Azure DevOps. Consulte Ativar assistência de IA com o servidor MCP do Azure DevOps para começar.

Ao mesclar ou trocar base, você está dizendo ao Git para integrar as alterações feitas em um ramificação com alterações feitas em outro. Muitas vezes, o Git conclui uma mesclagem ou rebase automaticamente sem sua assistência. No entanto, se o Git descobrir que uma alteração feita em um branch está em conflito com uma alteração feita em outro, ele solicitará que você resolva o conflito. Um conflito de mesclagem pode ocorrer quando os branches mesclados editam a mesma linha de arquivo de forma diferente ou quando um branch modifica um arquivo e outro branch o exclui. O processo para resolver conflitos de mesclagem é aplicável tanto ao comando merge do Git quanto ao comando rebase do Git.

Você pode resolver conflitos de mesclagem no Visual Studio ou usando a linha de comando e qualquer editor de texto.

Para obter uma visão geral do fluxo de trabalho do Git, consulte o tutorial do Git do Azure Repos.

Pré-requisitos

Categoria Requirements
Acesso ao projeto Membro de um projeto.
Permissões - Exibir código em projetos privados: pelo menos acesso básico .
- Clonar ou contribuir para o código em projetos privados: membro do grupo de segurança Colaboradores ou permissões correspondentes no projeto.
- Definir permissões de branch ou repositório: gerenciar permissões para o branch ou repositório.
- Defina políticas de ramificação, verificações de status ou altere a ramificação padrão: permissão Editar políticas para o repositório ou a ramificação, ou associação ao grupo de segurança Administradores do Projeto.
- Importar um repositório: membro do grupo de segurança Administradores do Projeto ou da permissão Criar repositório no nível do projeto do Git definida como Permitir. Para obter mais informações, consulte Definir permissões de repositório Git.
Serviços Repositórios habilitados.
Tools Optional. Use os comandos az repos: CLI do Azure DevOps.
Categoria Requirements
Acesso ao projeto Membro de um projeto.
Permissões - Exibir código: no mínimo acesso básico.
- Clonar ou contribuir com o código: membro do grupo de segurança Colaboradores ou permissões correspondentes no projeto.
Serviços Repositórios habilitados.

Entender conflitos de mesclagem

A mesclagem ou troca de base do Git integra commits de uma ramificação de origem em sua ramificação local atual (ramificação de destino). A mesclagem do Git executa uma mesclagem de encaminhamento rápido ou sem encaminhamento rápido. A mesclagem sem avanço rápido também é conhecida como mesclagem de três vias ou mesclagem verdadeira . A rebase do Git é outro tipo de mesclagem. Esses tipos de mesclagem são mostrados no diagrama a seguir.

Diagrama mostrando os commits de antes e depois ao usar Git merge e Git rebase.

Para a mesclagem do Git, se a dica do ramificação de destino existir no ramificação de origem, o tipo de mesclagem padrão será uma mesclagem de encaminhamento rápido. Caso contrário, o tipo de mesclagem padrão será uma mesclagem sem encaminhamento rápido.

Uma mesclagem rápida nunca pode ter um conflito de mesclagem porque o Git não aplicará uma mesclagem rápida se a ponta do branch de destino tiver divergido do branch de origem. Por padrão, o Git usa uma mesclagem rápida sempre que possível. Por exemplo, o Git aplicará uma mesclagem de encaminhamento rápido em um ramificação local que você atualiza apenas fazendo pull de seu ramificação de equivalente remoto.

Uma mesclagem sem encaminhamento rápido gera uma nova "confirmação de mesclagem" do ramificação de destino que integra as alterações do ramificação de origem com as alterações do ramificação de destino. As alterações aplicáveis são aquelas feitas após a última confirmação que é comum a ambos os ramificações. No diagrama anterior, commit C é a última confirmação comum em ambos os ramificações. Se qualquer alteração de branch de origem entrar em conflito com qualquer alteração de branch de destino, o Git solicitará que você resolva o conflito de mesclagem. A confirmação de mesclagem (L) contém o ramificação de origem integrado e as alterações de ramificação de destino. As dicas de ramificação de origem e de destino (K e E) são os pais da confirmação de mesclagem. No histórico de commits do ramificação, uma confirmação de mesclagem é um marcador útil para uma operação de mesclagem e mostra claramente quais ramificações foram mesclados.

O Git rebase reentança o histórico de confirmação do branch de destino para que ele contenha todas as confirmações do branch de origem, seguido por todas as confirmações de branch de destino desde a última confirmação comum. No diagrama anterior, commit C é a última confirmação comum em ambos os ramificações. Outra maneira de exibi-lo é que uma troca de base reproduz as alterações na ramificação de destino sobre o histórico da ramificação de origem. Se qualquer alteração de branch de origem entrar em conflito com qualquer alteração de branch de destino, o Git solicitará que você resolva o conflito de mesclagem. Assim como acontece com a mesclagem de encaminhamento rápido, uma troca de base não cria uma confirmação de mesclagem. Notavelmente, uma troca de base altera a sequência de commits da ramificação de destino existentes, o que não é o caso das outras estratégias de mesclagem. No diagrama anterior, commit K' contém as mesmas alterações que K, mas tem uma nova ID de confirmação porque ele é vinculado novamente ao commit E em vez de C.

A mesclagem e a rebase do Git modificam apenas o branch de destino. O branch de origem permanece inalterado. Ao encontrar um ou mais conflitos de mesclagem, você deve resolvê-los para concluir a mesclagem ou a rebase. Ou você pode cancelar a operação de mesclagem/rebase e retornar o branch de destino ao estado anterior.

Para obter mais informações sobre opções e estratégias de mesclagem, consulte as estratégias manuais de referência do Git e de mesclagem do Git.

Quando resolver conflitos de fusão

A mesclagem do Git e a rebase do Git são amplamente usadas no fluxo de trabalho do Git. Ao trabalhar em uma funcionalidade local ou em um ramo de correção de erros, é uma prática comum:

  1. Manter seu mainramificação local atualizado com seu equivalente remoto efetuando pull periodicamente para buscar e mesclar commits remotos.
  2. Integrar as atualizações de mainramificação local ao ramificação de recurso local usando uma troca de base ou mesclagem.
  3. Faça backup do trabalho no ramificação de recurso local enviando-o por push para o ramificação remoto correspondente.
  4. Após a conclusão do recurso, crie uma solicitação de pull para mesclar o ramificação de recurso remoto no mainramificação remoto.

Ao integrar com frequência as alterações remotas em seu repositório local, você pode ficar atento ao trabalho recente de outras pessoas e resolver prontamente quaisquer conflitos de mesclagem que surgirem.

Resolver conflitos de mesclagem

O processo para resolver conflitos de mesclagem é aplicável ao Git merge e ao Git rebase. Embora as etapas a seguir descrevam como resolver conflitos de mesclagem durante uma mesclagem, você pode resolve conflitos de mesclagem durante uma troca de base.

Dica

Se o branch de origem for um branch de acompanhamento remoto , verifique se o branch está up-to-date executando uma busca do Git antes de uma mesclagem. Ou execute o comando pull do Git, que combina um fetch do Git com um merge do Git.

O Visual Studio 2022 fornece uma experiência de controle de versão do Git usando o menu Git , as Alterações do Git e os menus de contexto no Gerenciador de Soluções. O Visual Studio 2019 versão 16.8 também oferece a interface de usuário do Git no Team Explorer. Para obter mais informações, consulte a guia Visual Studio 2019 – Team Explorer .

  1. No painel ramificações da janela Repositório do Git, confira o ramificação de destino. Clique com o botão direito do mouse no ramificação de origem e selecione Mesclar <ramificação de origem> em <ramificação de destino>.

    Captura de tela da opção Mesclagem no menu de contexto do branch na janela repositório Git do Visual Studio.

  2. O Visual Studio notificará você se o Git interrompeu a mesclagem devido a conflitos. Nesse caso, você pode resolver os conflitos ou cancelar a mesclagem e retornar ao estado de pré-mesclagem. A seção Alterações Não Mescladas da janela Alterações do Git lista os arquivos com conflitos de mesclagem. Para um arquivo com conflitos de mesclagem em seu conteúdo, clique duas vezes no arquivo para abri-lo no editor de mesclagem.

    Captura de tela dos arquivos com conflitos de mesclagem na janela Alterações do Git do Visual Studio.

  3. No editor de mesclagem, o painel Entrante mostra a versão do arquivo do branch de origem, o painel Atual mostra a versão do arquivo do branch de destino, e o painel Resultado mostra o arquivo de mesclagem resultante. Para aplicar alterações específicas de ramificação de origem ou de destino, marque a caixa de seleção ao lado das linhas conflitantes que você deseja manter. Você também pode editar diretamente o arquivo de mesclagem no painel Resultado . Escolha Aceitar Mesclagem depois de resolver todos os conflitos de mesclagem no arquivo atual. Repita esta etapa para cada arquivo com conflitos de conteúdo.

    Captura de tela do editor de mesclagem no Visual Studio.

  4. Para um arquivo que foi editado em um branch e excluído no outro, clique com o botão direito do mouse no arquivo e selecione qual ação de branch deseja.

    Captura de tela do menu de contexto de um arquivo conflitante na janela Alterações do Git do Visual Studio.

  5. Na janela Alterações do Git, insira um mensagem do commit e escolha Commit preparado para concluir a mesclagem — depois de resolver todos os conflitos de mesclagem para todos os arquivos.

    Captura de tela da mensagem de commit e do botão

Próximas etapas