Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
Quando sono presenti diversi collaboratori a un progetto, mantenere aggiornato il repository Git locale scaricando e integrando il lavoro caricato da altri nel repository remoto del progetto. Questi comandi Git aggiornano il repository locale:
- Git fetch scarica tutti i nuovi commit che sono stati caricati da altri nel repository remoto. I rami di rilevamento remoto nella cache dei repository locali vengono aggiornati. I rami locali rimangono invariati.
- Merge Git integra i commit da uno o più branch di origine in un branch di destinazione.
- Git rebase integra i commit da un ramo di origine in un ramo di destinazione, ma usa una strategia diversa rispetto all'unione Git.
- Git pull esegue un prelievo e quindi un merge o una rebase per integrare i commit prelevati nel ramo locale corrente.
Visual Studio usa un subset di questi comandi Git quando si sincronizza il repository locale con un repository remoto.
Per una panoramica del flusso di lavoro Git, vedere il tutorial Git di Azure Repos.
Questo articolo illustra le procedure per le attività seguenti:
- Scaricare le modifiche con fetch
- Aggiornare i rami con merge o rebase
- Scaricare le modifiche e aggiornare i rami con pull
Scaricare le modifiche con recupero
Git fetch scarica i commit dei branch remoti e i file oggetto referenziati che non esistono nel repository locale e aggiorna i rami di monitoraggio 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. Git fetch non aggiorna i rami locali. Ad esempio, se un repository remoto designato da origin
ha un ramo bugfix3
, Git fetch aggiornerà il ramo di monitoraggio remoto denominato origin/bugfix3
e non il ramo locale bugfix3
. È 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 2022
- Visual Studio 2019 - Menù Git
- Visual Studio 2019 - Team Explorer
- Riga di comando Git
Visual Studio 2022 offre un'esperienza di controllo della versione Git usando il menu Git, Le modifiche Git e tramite i menu di scelta rapida in Esplora soluzioni. Visual Studio 2019 versione 16.8 offre anche l'interfaccia utente Git di Team Explorer . Per altre informazioni, vedere la scheda Visual Studio 2019 - Team Explorer .
Nella finestra Modifiche Git scegliere Recupera. Selezionare quindi in uscita/in ingresso per aprire la finestra Repository Git .
È anche possibile scegliere Recupera dal menu Git.
Nella finestra Repository Git i commit recuperati vengono visualizzati nella sezione In ingresso . Selezionare un commit recuperato per visualizzare l'elenco dei file modificati in tale commit. Selezionare un file modificato per visualizzare una visualizzazione delle differenze del contenuto modificato.
Suggerimento
Fetch non eliminerà i rami di monitoraggio remoto nella cache del repository locale che non hanno più una controparte remota. Per configurare Visual Studio per eliminare rami di rilevamento remoto non aggiornati durante un Fetch:
- Selezionare Strumenti>Opzioni> controllo >codice sorgenteImpostazioni globali Git.
- Impostare l'opzione Elimina rami remoti durante il recupero su
True
.
Dopo un recupero Git, è possibile confrontare un ramo locale con il ramo di rilevamento remoto corrispondente per verificare 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 comando Git pull, 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 al ramo. Tuttavia, git merge e git rebase usano strategie diverse. Per ulteriori informazioni, vedere Aggiornare i rami tramite merge o rebase e Quando ribasare e quando fare un merge.
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). Git merge esegue un'operazione di fast-forward o no fast forward. L'unione senza inoltro rapido è nota anche come unione a tre vie o vera unione. Git rebase è un altro tipo di merge. Questi tipi di unione sono illustrati nel diagramma seguente.
Git merge e Git rebase vengono ampiamente usati nel flusso di lavoro Git. Quando si lavora su una funzionalità locale o un ramo di correzione di bug, è pratica comune:
- Mantenere aggiornato il ramo locale
main
con la controparte remota effettuando periodicamente il pull per recuperare e unire i commit remoti. - Integra gli aggiornamenti del ramo locale
main
nel tuo ramo di funzionalità locale usando un rebase o un merge. - Esegui il backup del tuo lavoro sul ramo di funzionalità locale eseguendo il push verso il ramo remoto corrispondente.
- Al completamento della funzione, creare una richiesta pull per unire il ramo funzionale remoto nel ramo remoto
main
.
Questo approccio consente di:
- Tieniti a conoscenza del lavoro recente da parte di altri utenti che potrebbero influire sul tuo lavoro.
- Risolvere tempestivamente eventuali conflitti tra il lavoro e quello degli altri.
- Applica la tua nuova funzionalità sopra al contenuto del progetto up-to-date.
- Ottieni una revisione della richiesta pull del tuo lavoro.
Fusione
Per il merge di Git, se la testa del ramo di destinazione esiste all'interno del ramo di origine, il tipo di unione predefinito sarà un merge con avanzamento veloce. In caso contrario, il tipo di merge predefinito sarà un merge no-fast-forward.
Un'unione Git con inoltro rapido non può mai avere un conflitto di merge perché Git non applicherà un merge rapido se la punta del ramo di destinazione si è discosta dal ramo di origine. Per impostazione predefinita, Git usa un'unione rapida ogni volta che possibile. Ad esempio, Git applicherà un merge fast-forward su un ramo locale che viene aggiornato solo eseguendo il pull dalla sua controparte remota.
Un'unione Git no-fast-forward genera un nuovo "commit di merge" del ramo di destinazione 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 una modifica del ramo di origine è in conflitto con qualsiasi modifica del ramo di destinazione, Git chiederà di risolvere il conflitto di merge. Il commit di merge (L) contiene le modifiche del ramo di origine integrato e del ramo di destinazione. Le punte del ramo di origine e di destinazione (K e E) sono i genitori del commit di merge. Nella cronologia dei commit del ramo, un commit di merge è un indicatore utile per un'operazione di merge 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 merge e restituire il ramo di destinazione allo stato precedente.
Per maggiori informazioni sulle opzioni e sulle strategie di merge, consultare il manuale di riferimento di Git e le strategie di merge di Git.
Suggerimento
Se il ramo di origine è un ramo di rilevamento remoto, assicurarsi che il ramo sia up-to-date eseguendo un recupero Git prima dell'unione.
- Visual Studio 2022
- Visual Studio 2019 - Menù Git
- Visual Studio 2019 - Team Explorer
- Riga di comando Git
Scegliere Git Manage Branch (Gestisci rami Git>) dalla barra dei menu per aprire la finestra Repository Git.
Nella finestra repository Git fare clic con il pulsante destro del mouse sul ramo di destinazione e selezionare Checkout.
Fare clic con il pulsante destro del mouse sul ramo di origine e selezionare Unisci <ramo-di-origine> in <ramo-di-destinazione>.
Visual Studio visualizzerà un messaggio di conferma dopo un'unione completata.
Se l'unione viene interrotta a causa di conflitti di merge, Visual Studio invierà una notifica. È possibile risolvere i conflitti oppure annullare l'unione e tornare allo stato di pre-unione.
Reimposta la base
Git esegue nuovamente la ribase della cronologia dei commit del ramo di destinazione in modo che contenga tutti i commit del ramo di origine, seguiti da tutti i commit del ramo di destinazione dall'ultimo commit comune. Un altro modo per visualizzare è che una riesecuzione della base Git riproduce le modifiche nel ramo di destinazione sopra la cronologia dei rami di origine. Se una modifica del ramo di origine è in conflitto con qualsiasi modifica del ramo di destinazione, Git chiederà 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 per le altre strategie di merge. Nel diagramma precedente, commit K' contiene le stesse modifiche di K, ma ha un nuovo ID commit perché si collega di nuovo al commit E invece di 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 rebase. In alternativa, è possibile annullare l'operazione di ribase e restituire il ramo di destinazione allo stato precedente.
Se sei l'unica persona che lavora sulla tua funzionalità o sul tuo ramo di correzione di bug, è consigliabile usare Git rebase per integrare nuovi main
commit del ramo. Altrimenti, usa il merge di Git. Per altre informazioni su Git rebase e su quando usarlo, vedere Applicare modifiche con rebase e Rebase vs merge.
Suggerimento
Se il ramo di origine è un ramo di rilevamento remoto, assicurarsi che il ramo sia up-to-date eseguendo un recupero Git prima della rebase.
- Visual Studio 2022
- Visual Studio 2019 - Menù Git
- Visual Studio 2019 - Team Explorer
- Riga di comando Git
Scegliere > Gestisci branche per aprire la finestra repository Git.
Nella finestra repository Git fare clic con il pulsante destro del mouse sul ramo di destinazione e selezionare Checkout.
Fare clic con il pulsante destro del mouse sul ramo di origine e selezionare Rebase <ramo di destinazione> su <ramo di origine>.
Visual Studio visualizzerà un messaggio di conferma al termine di un rebase riuscito.
Se la rebase viene interrotta a causa di conflitti di merge, Visual Studio invierà una notifica. Puoi risolvere i conflittioppure annullare il rebase e tornare allo stato prima della rebase.
Scaricare le modifiche e aggiornare i rami con il comando pull
Per impostazione predefinita, Git pull combina un fetch Git e un merge Git per aggiornare il ramo locale corrente dal suo corrispondente remoto. Facoltativamente, git pull può eseguire un rebase invece di un merge Git.
A differenza di 'Git fetch', 'Git pull' aggiornerà immediatamente il tuo ramo locale corrente dopo aver scaricato nuovi commit dal repository remoto. Usare git pull quando si sa di voler aggiornare il proprio ramo locale subito dopo un git fetch.
Suggerimento
Per configurare Visual Studio per eseguire un rebase anziché un merge quando si effettua un pull:
- Dal menu Git passare a Strumenti>Opzioni>controllo del codice> sorgenteImpostazioni globali Git.
- Imposta l'opzione Rebase del ramo locale quando si esegue il pull su
True
.
- Visual Studio 2022
- Visual Studio 2019 - Menù Git
- Visual Studio 2019 - Team Explorer
- Riga di comando Git
Nella finestra Modifiche Git scegliere Pull.
È anche possibile scegliere Pull dal menu Git.
Al termine dell'operazione pull viene visualizzato un messaggio di conferma.
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.
Nota
In Visual Studio la sincronizzazione esegue un 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.