Compartilhar via


Resolver conflitos de mesclagem

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Visual Studio 2019 | Visual Studio 2022

Ao mesclar ou rebasear, você está dizendo ao Git para integrar as alterações feitas em um branch 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 à mesclagem e à 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 de permissões para o branch ou repositório.
- Alterar o branch padrão: editar permissões de políticas para o repositório.
- 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.
Ferramentas Optional. Use comandos az repos : CLI do Azure DevOps.

Observação

Em projetos públicos, os usuários com acesso ao Stakeholder têm acesso total ao Azure Repos, incluindo exibição, clonagem e contribuição para o código.

Categoria Requirements
Acesso ao Projeto Membro de um projeto.
Permissões - Exibir código: pelo menos 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 rebase do Git integra confirmações de um branch de origem ao branch local atual (branch de destino). A mesclagem do Git executa uma mesclagem rápida ou sem avanço 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 as confirmações de antes e depois ao usar a mesclagem do Git e a rebase do Git.

Para a mesclagem do Git, se a ponta do branch de destino existir dentro do branch de origem, o tipo de mesclagem padrão será uma mesclagem de avanço rápido. Caso contrário, o tipo de mesclagem padrão será uma mesclagem sem avanço 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 avanço rápido em uma ramificação local que você só atualiza puxando de seu branch de equivalente remoto.

Uma mesclagem sem avanço rápido gera uma nova "confirmação de mesclagem" do branch de destino que integra as alterações do branch de origem com as alterações de branch de destino. As alterações aplicáveis são aquelas feitas após a última confirmação que é comum a ambas as ramificações. No diagrama anterior, commit C é a última confirmação comum em ambos os branches. 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 branch de origem integrado e as alterações de branch 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 confirmação do branch, uma confirmação de mesclagem é um marcador útil para uma operação de mesclagem e mostra claramente quais branches 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 branches. Outra maneira de exibi-lo é que uma rebase reproduza as alterações em seu branch de destino na parte superior do histórico do branch 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 avanço rápido, uma rebase não cria uma confirmação de mesclagem. Notavelmente, uma rebase altera a sequência de confirmações de branch 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 mesclagem

A mesclagem do Git e a rebase do Git são amplamente usadas no fluxo de trabalho do Git. Ao trabalhar em um recurso local ou branch de bugfix, é uma prática comum:

  1. Mantenha sua ramificação local main atual com seu equivalente remoto puxando periodicamente para buscar e mesclar confirmações remotas.
  2. Integre as atualizações de ramificação local main ao branch de recursos local usando uma rebase ou mesclagem.
  3. Faça backup do seu trabalho no branch de recursos local enviando-o por push para o branch remoto correspondente.
  4. Após a conclusão do recurso, crie uma solicitação de pull para mesclar seu branch de recursos remoto no branch remoto main .

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 à mesclagem do Git e à rebase do Git. Embora as etapas a seguir descrevam como resolver conflitos de mesclagem durante uma mesclagem, você pode resolver conflitos de mesclagem de maneira semelhante durante uma rebase.

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 de pull do Git, que combina uma busca do Git com uma mesclagem 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 do usuário do Git do Team Explorer . Para obter mais informações, consulte a guia Visual Studio 2019 – Team Explorer .

  1. No painel Branches da janela repositório Git , faça check-out do branch de destino. Em seguida, clique com o botão direito do mouse no branch de origem e escolha Mesclar <o branch> de origem no <branch 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 Entrada mostra a versão do arquivo do branch de origem, o painel Atual mostra a versão do arquivo de 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 uma mensagem de confirmação e escolha Confirmar Etapas para concluir a mesclagem depois de resolver todos os conflitos de mesclagem para todos os arquivos.

    Captura de tela da mensagem de confirmação e do botão Confirmar Etapas na janela Alterações do Git do Visual Studio.

Próximas etapas