Atualizar código com busca, mesclagem e pull

Serviços de DevOps do Azure | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Quando houver vários contribuidores para um projeto, mantenha seu repositório Git local atualizado baixando e integrando o trabalho que outros carregaram para o repositório remoto do projeto. Estes comandos do Git atualizam seu repositório local:

  • O Git fetch baixa quaisquer novos commits que outros carregaram para o repositório remoto. As ramificações de rastreamento remoto no cache de repositório local são atualizadas — as ramificações locais permanecem inalteradas.
  • O Git merge integra confirmações de uma ou mais ramificações de origem em uma ramificação de destino.
  • O Git rebase integra confirmações de uma ramificação de origem em uma ramificação de destino, mas usa uma estratégia diferente da mesclagem do Git.
  • O Git pull executa uma busca e, em seguida, uma mesclagem ou rebase para integrar confirmações buscadas em sua ramificação local atual.

O Visual Studio usa um subconjunto desses comandos Git quando você sincroniza seu repositório local com um repositório remoto.

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

Este artigo fornece procedimentos para as seguintes tarefas:

  • Baixar alterações com fetch
  • Atualizar ramificações com mesclagem ou rebase
  • Baixar alterações e atualizar ramificações com pull

Baixar alterações com fetch

O Git fetch baixa ramificações remotas, confirmações e objetos de arquivo referenciados que não existem em seu repositório local e atualiza as ramificações de rastreamento remoto no cache de repositório local. As ramificações de rastreamento remoto são cópias somente leitura armazenadas em cache local de ramificações remotas e não são suas ramificações locais. O Git fetch não atualiza suas filiais locais. Por exemplo, se um repositório remoto designado por origin tiver uma bugfix3 ramificação, o Git fetch atualizará a ramificação de rastreamento remoto nomeada origin/bugfix3 e não sua ramificação local bugfix3 . Você pode usar ramificações de rastreamento remoto para:

  • Compare uma ramificação de rastreamento remoto com uma ramificação local para revisar as alterações buscadas.
  • Mesclar uma ramificação de rastreamento remoto em uma ramificação local.
  • Crie uma nova ramificação local a partir de uma ramificação de rastreamento remoto.

O Visual Studio 2022 fornece uma experiência de controle de versão do Git usando o menu Git, Alterações do Git e por meio de 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 Team Explorer Git. Para obter mais informações, consulte a guia Visual Studio 2019 - Team Explorer .

  1. Na janela Alterações do Git, escolha Fetch. Em seguida, selecione saída/entrada para abrir a janela Repositório Git.

    Captura de tela dos botões Buscar e do link Entrada na janela Alterações do Git do Visual Studio 2019.

    Você também pode escolher Buscar no menu Git.

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

  2. Na janela Repositório Git, confirmações buscadas aparecem na seção Entrada. Selecione uma confirmação buscada para ver a lista de arquivos alterados nessa confirmação. Selecione um arquivo alterado para ver uma exibição de comparação do conteúdo alterado.

    Captura de tela do menu Repositório Git no Visual Studio 2019.

Gorjeta

O Fetch não excluirá ramificações de rastreamento remoto em seu cache de recompra local que não tenham mais um equivalente remoto. Para configurar o Visual Studio para remover ramificações obsoletas de rastreamento remoto durante uma busca:

  • Selecione Opções de Ferramentas>>Controle do>código-fonte Configurações globais do Git.
  • Defina a opção Prune remote branches during fetch como True.

Após uma busca no Git, você pode comparar uma ramificação local com sua ramificação de rastreamento remoto correspondente para ver o que mudou na ramificação remota. Se você decidir atualizar sua ramificação local atual com alterações buscadas, poderá executar uma mesclagem ou rebase do Git. Ou, você pode executar o Git pull, que combina uma busca do Git com uma mesclagem ou rebase do Git. Tanto a mesclagem do Git quanto a rebase do Git atualizam uma ramificação de destino aplicando confirmações de uma ramificação de origem a ela. No entanto, a fusão do Git e a rebase do Git usam estratégias diferentes. Para obter mais informações, consulte Atualizar ramificações com mesclagem ou rebase e Quando rebasear versus mesclar.

Atualizar ramificações com mesclagem ou rebase

O Git merge e o Git rebase integram 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 avanço rápido ou de avanço rápido. A mesclagem sem avanço rápido também é conhecida como mesclagem de três vias ou mesclagem verdadeira . Git rebase é outro tipo de fusão. Esses tipos de mesclagem são mostrados no diagrama a seguir.

Diagrama mostrando as confirmações antes e depois ao usar mesclagem e rebaseamento.

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 ramificação de correção de bugs, é prática comum:

  1. Mantenha sua filial local main atualizada com sua contraparte remota, puxando periodicamente para buscar e mesclar confirmações remotas.
  2. Integre atualizações de ramificação local main em sua ramificação de recurso local usando uma rebase ou mesclagem.
  3. Faça backup de seu trabalho na ramificação de recurso local enviando-a para a ramificação remota correspondente.
  4. Após a conclusão do recurso, crie uma solicitação pull para mesclar sua ramificação de recurso remoto na ramificação remota main .

Esta abordagem ajuda-o a:

  • Mantenha-se atento ao trabalho recente de outras pessoas que possam afetar o seu trabalho.
  • Resolva prontamente quaisquer conflitos entre o seu trabalho e o de outros.
  • Aplique seu novo recurso sobre o conteúdo atualizado do projeto.
  • Obtenha uma revisão pull request do seu trabalho.

Unir

Para mesclagem Git, se a ponta da ramificação de destino existir dentro da ramificação 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 Git de avanço rápido nunca pode ter um conflito de mesclagem porque o Git não aplicará uma mesclagem de avanço rápido se a ponta da ramificação de destino tiver divergido da ramificação de origem. Por padrão, o Git usa uma mesclagem de avanço rápido 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 extraindo de sua ramificação homóloga remota.

Uma mesclagem Git sem avanço rápido gera uma nova ramificação de destino "merge commit" que integra alterações de ramificação de origem com alterações de ramificação 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, a confirmação C é a última confirmação comum em ambas as ramificações. Se qualquer 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. A confirmação de mesclagem (L) contém as alterações integradas de ramificação de origem e ramificação de destino. As dicas de ramificação de origem e destino (K e E) são os pais da confirmação de mesclagem. No histórico de confirmação da ramificação, uma confirmação de mesclagem é um marcador útil para uma operação de mesclagem e mostra claramente quais ramificações foram mescladas.

A mesclagem do Git apenas modifica a ramificação de destino — a ramificação de origem permanece inalterada. Quando você encontrar um ou mais conflitos de mesclagem, deverá resolvê-los para concluir a mesclagem. Ou, você pode cancelar a operação de mesclagem e retornar a ramificação de destino ao seu 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.

Gorjeta

Se a ramificação de origem for uma ramificação de rastreamento remoto, certifique-se de que a ramificação esteja atualizada executando uma busca Git antes da mesclagem.

  1. Escolha Git > Manage Branches na barra de menus para abrir a janela Git Repository .

    Captura de tela da opção Gerenciar ramificações no menu Git do Visual Studio 2019.

  2. Na janela Repositório Git, clique com o botão direito do mouse na ramificação de destino e selecione Checkout.

    Captura de tela da opção Checkout na janela Repositório Git do Visual Studio 2019.

  3. Clique com o botão direito do mouse na ramificação de origem e selecione Mesclar <ramificação> de origem na <ramificação> de destino.

    Captura de tela da opção Mesclar na janela Repositório Git do Visual Studio 2019.

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

    Captura de tela da mensagem de confirmação de mesclagem na janela Repositório Git do Visual Studio 2019.

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

    Captura de tela da mensagem de conflito de mesclagem na janela Repositório Git do Visual Studio 2019.

Rebase

A rebase do Git resequencia o histórico de confirmações da ramificação de destino para que ela contenha todas as confirmações de ramificação de origem, seguidas por todas as confirmações de ramificação de destino desde a última confirmação comum. Outra maneira de visualizá-lo é que uma rebase do Git reproduz as alterações na ramificação de destino sobre o histórico da ramificação de origem. Se qualquer 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. A rebase do Git não cria uma confirmação de mesclagem. Notavelmente, a rebase do Git altera a sequência dos commits de 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 de commit porque ele se vincula de volta para commit E em vez de C.

A rebase do Git apenas modifica a ramificação de destino — a ramificação de origem permanece inalterada. Quando você encontrar um ou mais conflitos de mesclagem, deverá resolvê-los para concluir a rebase. Ou, você pode cancelar a operação de rebase e retornar a ramificação de destino ao seu estado anterior.

Se você for a única pessoa trabalhando em sua ramificação de recurso ou correção de bugs, considere usar o Git rebase para integrar novos main commits de ramificação a ela. Caso contrário, use a mesclagem Git. Para obter mais informações sobre o Git rebase e quando usá-lo, consulte Aplicar alterações com rebase e Rebase vs merge.

Gorjeta

Se a ramificação de origem for uma ramificação de rastreamento remoto, certifique-se de que a ramificação esteja atualizada executando uma busca Git antes da rebase.

  1. Escolha Git > Manage Branches para abrir a janela Git Repository .

    Captura de tela da opção Gerenciar ramificações no menu Git do Visual Studio 2019.

  2. Na janela Repositório Git, clique com o botão direito do mouse na ramificação de destino e selecione Checkout.

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

  3. Clique com o botão direito do mouse na ramificação de origem e selecione Rebasear <ramificação> de destino na <ramificação> de origem.

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

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

    Captura de tela da mensagem de confirmação de rebase na janela Repositório Git do Visual Studio 2019.

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

    Captura de tela da mensagem de conflito de rebase na janela Repositório Git do Visual Studio 2019.

Baixar alterações e atualizar ramificações com pull

Por padrão, o Git pull combina uma busca Git e uma mesclagem Git para atualizar sua ramificação local atual de sua contraparte remota. Opcionalmente, o Git pull pode executar uma rebase do Git em vez de uma mesclagem do Git.

Ao contrário do Git fetch, o Git pull atualizará sua ramificação local atual imediatamente após o download de novas confirmações do repositório remoto. Use o Git pull quando souber que deseja atualizar sua ramificação local atual logo após uma busca do Git.

Gorjeta

Para configurar o Visual Studio para rebasear em vez de mesclar quando você Pull:

  1. No menu Git, vá para Opções de Ferramentas>>Controle do>Código-fonte Configurações Globais do Git.
  2. Defina a opção Rebasear ramificação local ao puxar como True.
  1. Na janela Alterações do Git, escolha Pull.

    Captura de tela do botão Pull na janela Git Changes do Visual Studio 2019.

    Você também pode escolher Pull no menu Git.

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

  2. Uma mensagem de confirmação é exibida quando a operação pull é concluída.

    Captura de tela da mensagem de confirmação pull na janela Git Changes no Visual Studio 2019.

    Se houver conflitos durante a parte de mesclagem da operação pull, o Visual Studio irá notificá-lo. Você pode resolver os conflitos ou cancelar a mesclagem e retornar ao estado de pré-mesclagem.

    Captura de tela da mensagem de conflito pull na janela Alterações do Git no Visual Studio 2019.

Nota

No Visual Studio, o Sync executa um Pull e, em seguida, um Push para sincronizar uma ramificação local e remota. Para obter mais informações sobre sincronização, consulte Usar git fetch, pull, push e sync para controle de versão no Visual Studio.

Próximos passos