Aplicar alterações com troca de base

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

Visual Studio 2019 | Visual Studio 2022

O Git mantém automaticamente um histórico de desenvolvimento em uma ramificação vinculando cada novo commit ao seu antecessor. Quando você mescla uma ramificação em outra, o histórico pode se tornar menos simples. Por exemplo, uma mesclagem no-fast-forward combina linhas divergentes de desenvolvimento criando um commit de mesclagem com vários antecessores. Por outro lado, uma trocar base do Git combina linhas divergentes de desenvolvimento sem criar um commit de mesclagem, o que resulta em um histórico de commit mais simples, mas perde informações sobre a mesclagem. Sua escolha de tipo de mesclagem provavelmente é influenciada por você querer preservar um registro da mesclagem ou simplificar o histórico de commits.

Este artigo discute quando usar um trocar base em vez de uma mesclagem no-fast-forward e fornece procedimentos para as seguintes tarefas:

  • Trocar base da sua ramificação local
  • Forçar push da sua ramificação local após um trocar base
  • Trocar base interativo para combinação por squash de commits locais

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

Trocar base da sua ramificação local

O trocar base do Git integra commits de uma ramificação de origem em sua ramificação local atual (ramificação de destino). A ramificação de origem permanece inalterada. Para comparação, trocar base do Git e outros tipos de mesclagem são mostrados no diagrama a seguir.

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

O trocar base do Git sequencia novamente o histórico de commits da ramificação de destino para que ele contenha todos os commits da ramificação de origem, seguido por todos os commits da ramificação de destino desde o último commit comum. 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. Notavelmente, a troca de base do Git 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 um novo ID do commit porque ele é vinculado de volta ao commit E em vez de C.

Durante o trocar base, se uma alteração de ramificação de origem entrar em conflito com qualquer alteração de ramificação de destino, o Git solicitará que você resolva o conflito de mesclagem. Você pode resolver conflitos de mesclagem durante uma troca de base da mesma forma que resolve conflitos de mesclagem durante uma mesclagem.

Trocar base X mesclagem no-fast-forward

A troca de base do Git resulta em um histórico de confirmação mais simples, mas menos exato do que uma mesclagem no-fast-forward, também conhecida como mesclagem three-way ou true. Quando você quiser um registro de uma mesclagem no histórico de commits, use uma mesclagem no-fast-forward.

Se você for a única pessoa trabalhando em um recurso ou ramificação de correção de bugs, considere usar uma troca de base para integrar periodicamente o trabalho de ramificação recente main a ele. Essa estratégia ajuda a garantir que você fique ciente do trabalho recente de outras pessoas e prontamente resolve quaisquer conflitos de mesclagem que surjam. Ao trocar base, você implementa seu novo recurso sobre o trabalho de ramificação mais recente main, o que ajuda a manter um histórico de commit linear.

Para obter mais informações sobre trocar base do Git e quando usá-la, consulte Trocar base X Mesclagem.

Diretrizes de troca de base e forçar push

Se você basear novamente uma ramificação local que você efetuou push anteriormente e, em seguida, executar o comando push padrão do Git novamente, o push falhará. O comando push padrão do Git aplica uma mesclagem de avanço rápido para integrar sua ramificação local à ramificação remota. Esse comando falhará após uma troca de base porque a troca de base altera a sequência de commits existentes na ramificação de destino local, portanto, ele não corresponde mais ao histórico de seu equivalente remoto. Nesse cenário, um forçar push terá êxito substituindo a ramificação remota.

A troca de base do Git e forçar push são ferramentas poderosas, mas tenha essas diretrizes em mente ao decidir se deseja usá-las:

  • Não troque a base de uma ramificação local que tenha sido enviada por push e compartilhada com outras pessoas, a menos que você tenha certeza de que ninguém está usando a ramificação compartilhada. Após uma troca de base, a ramificação local não corresponderá mais ao histórico de seu equivalente remoto.
  • Não force o push a uma ramificação remota que esteja em uso por outras pessoas, pois sua versão local da ramificação remota não corresponderá mais ao histórico de ramificação remota atualizado.
  • Sua equipe deve concordar com os cenários de uso para troca de base e forçar push.

Dica

Para um processo de revisão colaborativa, use uma solicitação de pull para mesclar um novo trabalho na ramificação padrão de um repositório remoto.

Como fazer a troca de base

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. Escolha Gerenciar Branches do Git > para abrir a janela Repositório do Git.

    Captura de tela da opção Gerenciar Branches no menu Git no Visual Studio.

  2. Na janela Repositório do Git, clique com o botão direito do mouse no branch de destino e selecione Check-out.

    Captura de tela da opção Check-out no menu de atalho do branch na janela Repositório do Git no Visual Studio.

  3. Clique com o botão direito do mouse no branch de origem e selecione Trocar base< Branch de origem> em <Branch de destino>.

    Captura de tela da opção Trocar base no menu de atalho do branch na janela Repositório do Git no Visual Studio.

  4. O Visual Studio exibirá uma mensagem de confirmação após uma troca de base bem-sucedida.

    Captura de tela da mensagem de confirmação de troca de base na janela Repositório do Git no Visual Studio.

    Se a troca de base for interrompida devido a conflitos de mesclagem, o Visual Studio o notificará. Você pode resolver os conflitos ou cancelar a troca de base e retornar ao estado de pré-troca de base.

    Captura de tela da mensagem de conflito de troca de base na janela Repositório do Git no Visual Studio.

Forçar push da sua ramificação local após um trocar base

Se você trocar base de uma ramificação local que você efetuou push anteriormente, um push padrão subsequente do Git falhará. Em vez disso, você pode forçar push da sua ramificação local para substituir seu equivalente remoto para que seus históricos de commit correspondam.

Aviso

Nunca force push de uma ramificação na qual outras pessoas estão trabalhando. Para saber mais, consulte Diretrizes de trocar base e forçar push.

Para forçar push no Visual Studio, primeiro você deve habilitar a opção forçar push:

  1. Acesse Ferramentas>Opções>Controle do Código-fonte>Configurações Globais do Git.

  2. Selecione a opção Habilitar push --force-with-lease.

O sinalizador de push --force-with-lease do Git é mais seguro do que o sinalizador --force porque ele não substituirá uma ramificação remota que tenha commits que não estão integrados na ramificação local que você está forçando o envio por push.

  1. Na janela Alterações do Git, selecione o botão de push para efetuar push de commit.

    Captura de tela do botão de push de seta para cima na janela Alterações do Git do Visual Studio.

    Ou, você pode selecionar Push no menu Git.

    Captura de tela da opção Push no menu Git no Visual Studio.

  2. Se a operação de push padrão do Git falhar, o Visual Studio iniciará a caixa de diálogo falha do Git-Push. Escolha Forçar Push.

    Captura de tela da caixa de diálogo Falha do Git-push no Visual Studio.

  3. O Visual Studio exibirá uma mensagem de confirmação após um push bem-sucedido.

    Captura de tela da mensagem de confirmação do push no Visual Studio.

Trocar base interativo para combinação por squash de commits locais

Normalmente, à medida que você trabalha em um novo recurso em sua ramificação de recurso local, você criará vários commits. Quando estiver pronto para publicar o novo recurso, convém consolidar esses commits em um único commit para simplificar o histórico de commits. Você pode usar uma troca de base interativa para combinar por squash vários commits em um único commit.

O Visual Studio 2022 não dá suporte à troca de base interativa. Em vez disso, use a linha de comando do Git.

Observação

Os usuários do Azure DevOps podem fazer mesclagem squash para condensar o histórico de commit de uma ramificação de tópicos durante uma solicitação de pull.

Próximas etapas