Risoluzione dei conflitti

Si verifica un conflitto quando vengono apportate modifiche allo stesso elemento sia nell'area di lavoro che nel repository Git remoto. Quando si verifica un conflitto, lo stato git indica Conflitto e Commit è disabilitato.

Screenshot of a report with a Git status that says conflict.

Importante

Questa funzionalità è disponibile in anteprima.

Quando si seleziona Aggiorna in caso di conflitti, un messaggio informa che è necessario risolvere i conflitti prima di poter aggiornare.

Screenshot of error message from source control tab informing about conflicts.

Esistono tre modi per risolvere un conflitto:

Risolvere il conflitto nell'interfaccia utente

Selezionare Aggiorna tutto per visualizzare un elenco di tutti gli elementi con conflitti. È quindi possibile selezionare la versione da mantenere per ogni elemento. Per ogni elemento in conflitto, è possibile scegliere di accettare le modifiche in ingresso dal repository Git o mantenere la versione corrente presente nell'area di lavoro.

Screenshot of UI to select which version of a conflicted item to keep.

  • Scegliere Accetta modifiche in ingresso per eseguire l'override delle modifiche nell'area di lavoro. Le modifiche dell'area di lavoro andranno perse e lo stato git cambierà in modo da sincronizzare se l'importazione ha esito positivo.

  • Scegliere Mantieni contenuto corrente per mantenere la versione attualmente nell'area di lavoro. Al termine dell'aggiornamento, lo stato Git diventa di cui non è stato eseguito il commit man mano che le modifiche nell'area di lavoro non vengono ancora sottoposte a commit nel ramo.

Ripristinare uno stato precedente

È possibile ripristinare l'intera area di lavoro o il ramo Git fino all'ultimo stato sincronizzato. Se si ripristina il ramo Git a un commit precedente, è comunque possibile visualizzare le modifiche apportate al ramo non sincronizzato. Se si ripristina l'area di lavoro, si perdono tutte le modifiche apportate all'area di lavoro dopo l'ultimo commit.

Per ripristinare lo stato sincronizzato precedente, eseguire una delle azioni seguenti:

  • Usare il comando Annulla per restituire gli elementi in conflitto nell'area di lavoro all'ultimo stato sincronizzato.
  • Ripristinare l'ultimo stato sincronizzato in Git usando il git revert comando in Azure DevOps.

È anche possibile risolvere i conflitti disconnettendo e riconnettendo l'area di lavoro. Quando si riconnette, selezionare la direzione da sincronizzare. Si noti, tuttavia, che quando si riconnette, tutti gli elementi nell'area di lavoro o nel ramo vengono sovrascritti e non solo quelli in conflitto. Non restituisce l'area di lavoro o il ramo all'ultimo stato sincronizzato. Invece, sovrascrive tutto il contenuto in un'unica posizione con il contenuto dell'altro.

Risolvere il conflitto in Git

Se non si è certi delle modifiche apportate e della versione da scegliere e non si vuole ripristinare uno stato precedente, è possibile provare a risolvere il conflitto nel repository Git creando un nuovo ramo, risolvendo il conflitto in tale ramo e sincronizzandolo con quello corrente.

Nota

Solo un amministratore dell'area di lavoro può riconnettere l'area di lavoro al nuovo ramo.

  1. Nel riquadro Controllo del codice sorgente controllare un nuovo ramo usando l'ultimo ID ramo sincronizzato visualizzato nella parte inferiore della schermata

    Screenshot showing how to check out a new branch from the source control pane by selecting the down arrow.

    Screenshot of branch ID information shown on bottom of the screen.

    Questo passaggio crea un nuovo ramo dal ramo in conflitto usando l'ultimo stato Git sincronizzato, prima che le modifiche siano state apportate in conflitto con le modifiche. È possibile visualizzare le modifiche nel riquadro Controllo del codice sorgente, ma non è necessario eseguire l'aggiornamento dal ramo Git. Il ramo checkout mantiene lo stato corrente dell'area di lavoro, quindi le modifiche di cui non è stato eseguito il commit vengono mantenute durante la modifica del ramo.

  2. Eseguire il commit delle modifiche nel nuovo ramo. Questo nuovo ramo include ora le modifiche apportate agli elementi connessi a una versione precedente del ramo Git che non è in conflitto con le modifiche apportate.

  3. In Git risolvere i conflitti tra il ramo originale e il nuovo ramo.

  4. In Git unire il nuovo ramo nel ramo originale

  5. In Infrastruttura ripristinare il ramo originale dell'area di lavoro.