Resolver conflitos de mesclagem

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Ao mesclar ou trocar base, 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 troca de base automaticamente sem sua assistência. No entanto, se o Git descobrir que uma alteração feita em um branch que 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 à troca de base 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 Tutorial do Git do Azure Repos.

Este artigo fornece procedimentos para as seguintes tarefas:

  • Entender conflitos de mesclagem
  • Resolver conflitos de mesclagem

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 encaminhamento rápido também é conhecida como mesclagem three-way ou mesclagem true. A troca de base do Git é outro tipo de mesclagem. Esses tipos de mesclagem são mostrados no diagrama a seguir.

Diagrama mostrando os commits antes e depois ao usar a mesclagem e o trocar base do Git.

Para a mesclagem do Git, se a dica do branch de destino existir no branch 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 encaminhamento rápido nunca pode ter um conflito de mesclagem porque o Git não aplicará uma mesclagem de encaminhamento rápido se a dica do branch de destino tiver divergido do branch de origem. Por padrão, o Git usa uma mesclagem de encaminhamento rápido sempre que possível. Por exemplo, o Git aplicará uma mesclagem de encaminhamento rápido em um branch local que você atualiza apenas fazendo pull de seu branch de equivalente remoto.

Uma mesclagem sem encaminhamento 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 do branch de destino. As alterações aplicáveis são aquelas feitas após a última confirmação que é comum a ambos os branches. 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 branch de origem e de destino (K e E) são os pais da confirmação de mesclagem. No histórico de commits do branch, uma confirmação de mesclagem é um marcador útil para uma operação de mesclagem e mostra claramente quais branches foram mesclados.

A troca de base do Git sequencia novamente 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 do 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 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 um novo ID do commit porque ele é vinculado de volta ao commit E em vez de C.

A troca de base e a mesclagem 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 troca de base. Ou você pode cancelar a operação de mesclagem/troca de base e retornar o branch de destino ao estado anterior.

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

Quando resolver conflitos de mesclagem

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

  1. Manter seu mainbranch local atualizado com seu equivalente remoto efetuando pull periodicamente para buscar e mesclar commits remotos.
  2. Integrar as atualizações de mainbranch local ao branch de recurso local usando uma troca de base ou mesclagem.
  3. Faça backup do trabalho no branch de recurso 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 o branch de recurso remoto no mainbranch remoto.

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

Resolver conflitos de mesclagem

O processo para resolver conflitos de mesclagem é aplicável à mesclagem do Git e à troca de base do Git. 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á atualizado 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 através dos 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 saber mais, consulte a guia Visual Studio 2019 - Team Explorer.

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

    Captura de tela da opção Mesclar no menu de contexto da ramificação na janela Repositório do Git no Visual Studio.

  2. O Visual Studio notificará você se o Git interromper a mesclagem devido a conflitos. No evento, 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 de Entrada 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 do branch 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 você deseja.

    Captura de tela do menu de contexto para arquivo conflitante na janela Alterações do Git no 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 do botão Confirmar mensagem e Commit preparado na janela Alterações do Git no Visual Studio.

Próximas etapas