Aggiornare il codice con recupero, unione e pull

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

Visual Studio 2022 | Visual Studio 2019 | Visual Studio 2017 | Visual Studio 2015

Quando sono presenti diversi collaboratori a un progetto, mantenere aggiornato il repository Git locale scaricando e integrando il lavoro caricato da altri utenti nel repository remoto del progetto. Questi comandi Git aggiornano il repository locale:

  • Git fetch scarica tutti i nuovi commit caricati da altri utenti nel repository remoto. I rami di rilevamento remoto nella cache dei repository locali vengono aggiornati. I rami locali rimangono invariati.
  • L'unione Git integra i commit da uno o più rami di origine in un ramo di destinazione.
  • Git rebase integra i commit da un ramo di origine in un ramo di destinazione, ma usa una strategia diversa rispetto a Git merge.
  • Git pull esegue un recupero e quindi un merge o una rebase per integrare i commit recuperati nel ramo locale corrente.

Visual Studio usa un subset di tali comandi Git quando si sincronizza il repository locale con un repository remoto.

Per una panoramica del flusso di lavoro Git, vedere Azure Repos esercitazione su Git.

Questo articolo illustra le procedure per le attività seguenti:

  • Scaricare le modifiche con recupero
  • Aggiornare i rami con merge o rebase
  • Scaricare le modifiche e aggiornare i rami con pull

Scaricare le modifiche con recupero

Il recupero Git scarica i commit dei rami remoti e gli oggetti file di riferimento che non esistono nel repository locale e aggiornano i rami di rilevamento remoto nella cache del repository locale. I rami di rilevamento remoto sono copie di sola lettura memorizzate nella cache locale di rami remoti e non sono rami locali. Il recupero Git non aggiorna i rami locali. Ad esempio, se un repository remoto designato da ha un bugfix3 ramo, git fetch aggiornerà il ramo di rilevamento remoto denominato origin/bugfix3 e non il ramo localebugfix3.origin È possibile usare rami di rilevamento remoto per:

  • Confrontare un ramo di rilevamento remoto con un ramo locale per esaminare le modifiche recuperate.
  • Unire un ramo di rilevamento remoto in un ramo locale.
  • Creare un nuovo ramo locale da un ramo di rilevamento remoto.

Visual Studio 2019 versione 16.8 e versioni successive offre un'esperienza di controllo della versione Git mantenendo l'interfaccia utente git di Team Explorer . Per usare Team Explorer, deselezionare Strumenti>Opzioni>anteprima Funzionalità>Nuova esperienza utente Git dalla barra dei menu. È possibile usare le funzionalità Git da entrambe le interfacce in modo intercambiabile. Di seguito viene fornito un confronto side-by-side di come eseguire un recupero Git.

Visual Studio Git

  1. Nella finestra Modifiche Git scegliere Recupera. Selezionare quindi in uscita/in ingresso per aprire la finestra Repository Git .

Screenshot dei pulsanti Fetch e In ingresso nella finestra Modifiche Git di Visual Studio 2019.

È anche possibile scegliere Recupera dal menu Git.

Screenshot dell'opzione Fetch nel menu Git in Visual Studio 2019.

  1. Nella finestra Repository Git i commit recuperati vengono visualizzati nella sezione In ingresso . Selezionare un commit recuperato per visualizzare l'elenco dei file modificati nel commit. Selezionare un file modificato per visualizzare una visualizzazione differenze del contenuto modificato.

Screenshot del menu Repository Git in Visual Studio 2019.

Visual Studio Team Explorer

  1. In Team Explorer selezionare Home e quindi scegliere Sincronizza per aprire la visualizzazione Sincronizzazione .

Screenshot dell'opzione Sincronizza in Team Explorer in Visual Studio 2019.

  1. Nella visualizzazione Sincronizzazione scegliere Recupera. Entrambi i pulsanti Fetch eseguono la stessa operazione. Al termine del download, i commit recuperati verranno visualizzati nella sezione Commit in ingresso .

Screenshot del pulsante Recupera nella visualizzazione Sincronizzazione di Team Explorer in Visual Studio 2019.

  1. Nella sezione Commit in ingresso fare clic con il pulsante destro del mouse su un commit e scegliere Visualizza dettagli commit per visualizzare i file modificati.

Screenshot del menu di scelta rapida per i commit in ingresso nella visualizzazione Sincronizzazione di Team Explorer in Visual Studio 2019.

  1. Nella finestra Dettagli commit i file modificati sono elencati nella sezione Modifiche .

Screenshot della finestra Dettagli commit in Visual Studio 2019.

Fare doppio clic su un file modificato per aprire una visualizzazione differenze del contenuto modificato.

Screenshot di una finestra diff del file in Visual Studio 2019.

Suggerimento

Il recupero non eliminerà i rami di rilevamento remoto nella cache del repository locale che non hanno più una controparte remota. Per configurare Visual Studio per eliminare i rami di rilevamento remoto non aggiornati durante un recupero:

  • Selezionare Strumenti>Opzioni> controllo >del codice sorgenteImpostazioni globali Git.
  • Impostare l'opzione Prune remote branch durante il recupero su True.

Dopo un recupero Git, è possibile confrontare un ramo locale con il ramo di rilevamento remoto corrispondente per visualizzare le modifiche apportate al ramo remoto. Se si decide di aggiornare il ramo locale corrente con le modifiche recuperate, è possibile eseguire un'operazione di merge o rebase Git. In alternativa, è possibile eseguire il pull Git, che combina un recupero Git con un'operazione di merge o rebase Git. Sia git merge che Git rebase aggiornano un ramo di destinazione applicando i commit da un ramo di origine. Tuttavia, Git merge e Git rebase usano strategie diverse. Per altre informazioni, vedere Aggiornare i rami con merge o rebase e When to rebase vs.

Aggiornare i rami con merge o rebase

Git merge e Git rebase integrano i commit da un ramo di origine nel ramo locale corrente (ramo di destinazione). L'unione Git esegue un merge rapido osenza avanzamento rapido. L'unione senza inoltro rapido è nota anche come unione a tre vie o vera unione. La rebase Git è un altro tipo di merge. Questi tipi di unione sono illustrati nel diagramma seguente.

Diagramma che mostra i commit prima e dopo quando si usa merge e rebase.

Il merge Git e la rebase Git vengono ampiamente usati nel flusso di lavoro Git. Quando si lavora a una funzionalità locale o a un ramo di correzione di bug, è pratica comune:

  1. Mantenere il ramo locale main corrente con la controparte remota eseguendo periodicamente il pull per recuperare e unire i commit remoti.
  2. Integrare gli aggiornamenti del ramo locale main nel ramo di funzionalità locale usando una rebase o un merge.
  3. Eseguire il backup del lavoro nel ramo di funzionalità locale eseguendo il push nel ramo remoto corrispondente.
  4. Al termine della funzionalità, creare una richiesta pull per unire il ramo di funzionalità remota nel ramo remoto main .

Questo approccio consente di:

  • Tieni presente il lavoro recente da parte di altri che potrebbero influire sul tuo lavoro.
  • Risolvere tempestivamente eventuali conflitti tra il lavoro e quello degli altri.
  • Applicare la nuova funzionalità al contenuto del progetto aggiornato.
  • Ottenere una revisione della richiesta pull del lavoro.

Unione

Per l'unione git, se il suggerimento del ramo di destinazione esiste all'interno del ramo di origine, il tipo di unione predefinito sarà un merge rapido. In caso contrario, il tipo di unione predefinito sarà un merge senza inoltro rapido.

Un'unione Git a inoltro rapido non può mai avere un conflitto di merge perché Git non applica un merge fast forward se la punta del ramo di destinazione si è allontanata dal ramo di origine. Per impostazione predefinita, Git usa un merge a inoltro rapido ogni volta che possibile. Ad esempio, Git applicherà un merge rapido in un ramo locale che si aggiorna solo eseguendo il pull dal ramo della controparte remota.

Un merge Git no-fast-forward genera un nuovo ramo di destinazione "merge commit" che integra le modifiche del ramo di origine con le modifiche del ramo di destinazione. Le modifiche applicabili sono quelle apportate dopo l'ultimo commit comune a entrambi i rami. Nel diagramma precedente il commit C è l'ultimo commit comune in entrambi i rami. Se qualsiasi modifica del ramo di origine è in conflitto con qualsiasi modifica del ramo di destinazione, Git richiederà di risolvere il conflitto di merge. Il commit di merge (L) contiene le modifiche del ramo di origine integrato e del ramo di destinazione. I suggerimenti per il ramo di origine e di destinazione (K e E) sono i genitori del commit di merge. Nella cronologia del commit del ramo, un commit di merge è un indicatore utile per un'operazione di unione e mostra chiaramente quali rami sono stati uniti.

L'unione Git modifica solo il ramo di destinazione: il ramo di origine rimane invariato. Quando si verificano uno o più conflitti di unione, è necessario risolverli per completare l'unione. In alternativa, è possibile annullare l'operazione di unione e restituire il ramo di destinazione allo stato precedente.

Per altre informazioni sulle opzioni di merge e sulle strategie, vedere la guida di riferimento git e le strategie di unione Git.

Suggerimento

Se il ramo di origine è un ramo di rilevamento remoto, assicurarsi che il ramo sia aggiornato eseguendo un recupero Git prima dell'unione.

Visual Studio 2019 versione 16.8 e versioni successive offre un'esperienza di controllo della versione Git mantenendo l'interfaccia utente Git di Team Explorer . Per usare Team Explorer, deselezionareOpzioni>strumenti>Anteprima funzionalità>Nuova esperienza utente Git dalla barra dei menu. È possibile usare le funzionalità Git da entrambe le interfacce in modo interscambiabile. Di seguito viene fornito un confronto side-by-side di come eseguire un merge Git.

Visual Studio Git

  1. Scegliere Git > Gestisci rami dalla barra dei menu per aprire la finestra Repository Git .

Screenshot dell'opzione Gestisci rami nel menu Git di Visual Studio 2019.

  1. Nella finestra Repository Git fare clic con il pulsante destro del mouse sul ramo di destinazione e selezionare Verifica.

Screenshot dell'opzione Checkout nella finestra Repository Git di Visual Studio 2019.

  1. Fare clic con il pulsante destro del mouse sul ramo di origine e scegliere Merge <source-branch in <target-branch>>.

Screenshot dell'opzione Merge nella finestra Repository Git di Visual Studio 2019.

  1. Visual Studio visualizzerà un messaggio di conferma dopo l'unione riuscita.

Screenshot del messaggio di conferma unione nella finestra Repository Git di Visual Studio 2019.

Se l'unione viene interrotta a causa di conflitti di unione, Visual Studio vi notifica. È possibile risolvere i conflitti o annullare l'unione e tornare allo stato di pre-unione.

Screenshot del messaggio di conflitto di merge nella finestra Repository Git di Visual Studio 2019.

Visual Studio Team Explorer

  1. In Team Explorer selezionare Home e scegliere Rami.

Screenshot dell'opzione Rami in Team Explorer in Visual Studio 2019.

  1. Nella visualizzazione Rami fare clic con il pulsante destro del mouse sul ramo di destinazione e selezionare Verifica.

Screenshot dell'opzione Checkout nella visualizzazione Rami di Team Explorer in Visual Studio 2019.

  1. Fare clic con il pulsante destro del mouse sul ramo di origine e scegliere Unione da.

Screenshot dell'opzione Merge From nella visualizzazione Rami di Team Explorer in Visual Studio 2019.

  1. Verificare le opzioni di unione e quindi fare clic su Merge.

Screenshot dei dettagli di unione nella visualizzazione Rami di Team Explorer in Visual Studio 2019.

  1. Visual Studio visualizzerà un messaggio di conferma dopo l'unione riuscita.

Screenshot del messaggio di conferma unione nella visualizzazione Rami di Team Explorer in Visual Studio 2019.

Se durante l'unione sono presenti conflitti, Visual Studio notifica. È possibile risolvere i conflitti o annullare l'unione e tornare allo stato di pre-unione.

Screenshot del messaggio di conflitto di merge nella visualizzazione Rami di Team Explorer in Visual Studio 2019.

Rebase

Git rebase restituisce la cronologia del commit del ramo di destinazione in modo che contenga tutti i commit del ramo di origine, seguiti da tutti i commit dei rami di destinazione dall'ultimo commit comune. Un altro modo per visualizzare è che una rebase Git riproduce le modifiche nel ramo di destinazione nella parte superiore della cronologia dei rami di origine. Se qualsiasi modifica del ramo di origine è in conflitto con qualsiasi modifica del ramo di destinazione, Git richiederà di risolvere il conflitto di merge. La rebase git non crea un commit di merge. In particolare, Git rebase modifica la sequenza dei commit del ramo di destinazione esistente, che non è il caso delle altre strategie di merge. Nel diagramma precedente il commit K' contiene le stesse modifiche di K, ma ha un nuovo ID commit perché si collega nuovamente al commit E anziché C.

Git rebase modifica solo il ramo di destinazione: il ramo di origine rimane invariato. Quando si verificano uno o più conflitti di unione, è necessario risolverli per completare la ribase. In alternativa, è possibile annullare l'operazione di ribase e restituire il ramo di destinazione allo stato precedente.

Se si è l'unico utente che lavora nella funzionalità o nel ramo di bugfix, è consigliabile usare Git rebase per integrare nuovi main commit di ramo in esso. In caso contrario, usare git merge. Per altre informazioni sulla rebase Git e su quando usarla, vedere Applicare modifiche con la rebase e Rebase vs merge.

Suggerimento

Se il ramo di origine è un ramo di rilevamento remoto, assicurarsi che il ramo sia aggiornato eseguendo un recupero Git prima della rebase.

Visual Studio 2019 versione 16.8 e versioni successive offre un'esperienza di controllo della versione Git mantenendo l'interfaccia utente git di Team Explorer . Per usare Team Explorer, deselezionare Strumenti>Opzioni>anteprima Funzionalità>Nuova esperienza utente Git dalla barra dei menu. È possibile usare le funzionalità Git da entrambe le interfacce in modo intercambiabile. Di seguito viene fornito un confronto side-by-side di come eseguire una ribase Git.

Visual Studio Git

  1. Scegliere Git Manage Branch (Gestisci rami Git>) per aprire la finestra Git Repository (Repository Git).

Screenshot dell'opzione Gestisci rami nel menu Git di Visual Studio 2019.

  1. Nella finestra Repository Git fare clic con il pulsante destro del mouse sul ramo di destinazione e scegliere Checkout (Checkout).

Screenshot dell'opzione Checkout nel menu di scelta rapida del ramo nella finestra Repository Git di Visual Studio 2019.

  1. Fare clic con il pulsante destro del mouse sul ramo di origine e scegliere Rebase <target-branch on source-branch (Ripristina ramo> di destinazione nel <ramo di origine>).

Screenshot dell'opzione Rebase nel menu di scelta rapida del ramo nella finestra Repository Git di Visual Studio 2019.

  1. Visual Studio visualizzerà un messaggio di conferma dopo una ribase riuscita.

Screenshot del messaggio di conferma della ribase nella finestra Repository Git di Visual Studio 2019.

Se la rebase viene interrotta a causa di conflitti di merge, Visual Studio invierà una notifica. È possibile risolvere i conflitti oppure annullare la ribase e tornare allo stato di pre-ribase.

Screenshot del messaggio di conflitto di ribase nella finestra Repository Git di Visual Studio 2019.

Visual Studio Team Explorer

  1. In Team Explorer selezionare Home e scegliere Rami.

Screenshot dell'opzione Rami in Team Explorer in Visual Studio 2019.

  1. Nella visualizzazione Rami fare clic con il pulsante destro del mouse sul ramo di destinazione e scegliere Estrazione.

Screenshot dell'opzione Checkout nella visualizzazione Rami di Team Explorer in Visual Studio 2019.

  1. Fare clic con il pulsante destro del mouse sul ramo di origine e scegliere Ripristina base.

Screenshot dell'opzione Rebase Onto nella visualizzazione Rami di Team Explorer in Visual Studio 2019.

  1. Verificare le opzioni di ribase e quindi fare clic su Rebase.

Screenshot dei dettagli della ribase nella visualizzazione Rami di Team Explorer in Visual Studio 2019.

  1. Visual Studio visualizzerà un messaggio di conferma dopo una ribase riuscita.

Screenshot del messaggio di conferma della ribase nella visualizzazione Rami di Team Explorer in Visual Studio 2019.

In caso di conflitti durante la ribase, Visual Studio invierà una notifica. È possibile risolvere i conflitti oppure annullare la ribase e tornare allo stato di pre-ribase.

Screenshot del messaggio di conflitto di ribase nella visualizzazione Rami di Team Explorer in Visual Studio 2019.

Scaricare le modifiche e aggiornare i rami con pull

Per impostazione predefinita, Git pull combina un recupero Git e un'unione Git per aggiornare il ramo locale corrente dalla controparte remota. Facoltativamente, Git pull può eseguire una rebase Git anziché un'unione Git.

A differenza del recupero Git, git pull aggiornerà il ramo locale corrente immediatamente dopo il download di nuovi commit dal repository remoto. Usare git pull quando si sa di voler aggiornare il ramo locale corrente subito dopo un recupero Git.

Visual Studio 2019 versione 16.8 e versioni successive offre un'esperienza di controllo della versione Git mantenendo l'interfaccia utente git di Team Explorer . Per usare Team Explorer, deselezionare Strumenti>Opzioni>anteprima Funzionalità>Nuova esperienza utente Git dalla barra dei menu. È possibile usare le funzionalità Git da entrambe le interfacce in modo intercambiabile. Di seguito viene fornito un confronto affiancato di come eseguire un pull Git.

Suggerimento

Per configurare Visual Studio in modo che ribase invece di eseguire il merge quando si esegue il pull:

  1. Dal menu Git passare a Strumenti>Opzioni> controllo >del codice sorgenteImpostazioni globali Git.
  2. Impostare l'opzione Rebase local branch quando si esegue il pull su True.

Visual Studio Git

  1. Nella finestra Modifiche Git scegliere Pull.

Screenshot del pulsante Pull nella finestra Modifiche Git di Visual Studio 2019.

È anche possibile scegliere Pull dal menu Git.

Screenshot dell'opzione Pull nel menu Git in Visual Studio 2019.

  1. Al termine dell'operazione pull viene visualizzato un messaggio di conferma.

Screenshot del messaggio di conferma pull nella finestra Modifiche Git in Visual Studio 2019.

In caso di conflitti durante la parte di merge dell'operazione pull, Visual Studio invierà una notifica. È possibile risolvere i conflitti oppure annullare l'unione e tornare allo stato di pre-unione.

Screenshot del messaggio di conflitto pull nella finestra Modifiche Git in Visual Studio 2019.

Visual Studio Team Explorer

  1. In Team Explorer selezionare Home e scegliere Sincronizza per aprire la visualizzazione Sincronizzazione .

Screenshot dell'opzione Sincronizza in Team Explorer in Visual Studio 2019.

  1. Nella visualizzazione Sincronizzazione scegliere Pull. Entrambi i pulsanti Pull eseguono la stessa operazione.

Screenshot delle opzioni pull nella visualizzazione Sincronizzazione di Team Explorer in Visual Studio 2019.

  1. Visual Studio visualizzerà un messaggio di conferma al termine dell'operazione pull.

Screenshot del messaggio di conferma pull nella visualizzazione Sincronizzazione di Team Explorer in Visual Studio 2019.

In caso di conflitti durante la parte di merge dell'operazione pull, Visual Studio invierà una notifica. È possibile risolvere i conflitti oppure annullare l'unione e tornare allo stato di pre-unione.

Screenshot del messaggio di conflitto pull nella visualizzazione Sincronizzazione di Team Explorer in Visual Studio 2019.

Nota

In Visual Studio la sincronizzazione esegue un'operazione pull e quindi un push per sincronizzare un ramo locale e remoto. Per altre informazioni sulla sincronizzazione, vedere Usare git fetch, pull, push e sincronizzazione per il controllo della versione in Visual Studio.

Passaggi successivi