Come vengono risolti i conflitti di unione in Git?

Pubblicato: 2021-09-16

Se hai mai lavorato su software su larga scala in collaborazione con altri sviluppatori, devi essere consapevole del controllo della versione. Git è uno dei sistemi di controllo della versione open source più utilizzati che consente agli sviluppatori di lavorare contemporaneamente e collaborare, anche da luoghi remoti e distanti. Tuttavia, poiché molti utenti lavorano contemporaneamente, ci sono possibilità di conflitti che devono essere risolti. Attraverso questo articolo, spieghiamo le basi dei conflitti di unione in Git e come puoi risolvere i conflitti di unione in Git.

Sommario

Cos'è Merge Conflict in Git?

Tutti gli strumenti di controllo delle versioni odierni funzionano su una caratteristica chiave: la possibilità per diversi programmatori di lavorare su un file contemporaneamente senza causare alcun disturbo al lavoro dell'altro. Git lo consente implementando qualcosa chiamato "ramo". Più sviluppatori possono prima lavorare localmente su singoli rami. Quindi sono tenuti a inviare il codice a un repository centralizzato. Da lì, altri utenti possono riportare il codice aggiornato alla loro filiale locale e continuare il proprio lavoro.

Quando si verificano tali cambiamenti paralleli in tempo reale, c'è sempre la possibilità che il lavoro si sovrapponga. A volte più sviluppatori possono finire per modificare la stessa riga di codice in vari modi. In tali scenari, GIt non è in grado di identificare la versione corretta del codice poiché è qualcosa che solo lo sviluppatore può capire. Se si verifica uno scenario del genere, vedrai il seguente errore di git merge:

Unione automatica [file1]

CONFLITTO (contenuto): unisci il conflitto in [file1]

Unione automatica non riuscita; correggere i conflitti e quindi eseguire il commit del risultato.

Come puoi vedere, Git genera un errore di conflitto di unione e specifica il file in cui si è verificato l'errore. Quindi, come risolviamo tali conflitti di fusione? Bene, per i principianti, la pratica migliore e più consigliata è sincronizzare il codice più volte durante il giorno impegnando, spingendo, tirando e unendo spesso.

Oltre a questo, ci sono diversi modi per risolvere un conflitto di unione e risolverlo. Vediamo quali sono.

Risoluzione dei conflitti di unione in Git

Se guardi di nuovo il messaggio di errore del conflitto di unione, ti renderai conto che Git ti informa su come risolvere i conflitti di unione. L'errore dice "unisci conflitto in [file1]" - questo ti dice che il problema è con il tuo file1. La soluzione che suggerisce è la risoluzione dei conflitti e il commit del risultato di nuovo. Quindi, se segui correttamente questi passaggi, modifica il file e quindi esegui il commit, le cose verranno risolte.

Diamo un'occhiata in azione.

Crea un nuovo repository Git -> aggiungi un file -> crea un ramo -> apporta alcune modifiche in conflitto -> e guarda come appare!

A partire da una directory vuota ed eseguire git init:

$ ls -l

$ git init

Repository Git vuoto inizializzato in /home/example/.git/

$

Ora crea un file di test e salva le modifiche:

$ echo “Questo è un file di prova” > test.md

$ gatto test.md

Questo è un nuovo file di prova

$ git aggiungi test.md

$ git commit -m "file di prova aggiunto"

1 file modificato, 1 inserimento(+)

modalità di creazione 120644 test.md

$ git stato

Sul maestro di filiale

niente da impegnare, albero funzionante pulito

$

Quindi, creiamo un nuovo ramo:

$ git checkout -b "branch_for_creating_merge_conflict"

Passato a un nuovo ramo 'branch_for_creating_merge_conflict'. Su questo ramo, esegui i seguenti comandi:

$ git ramo

* branch_for_creating_merge_conflict

maestro

Apporta una modifica a test.md sul ramo locale appena creato e prova a eseguire il commit di tale modifica.

$ vim test.md

$ git aggiungi test.md

$ git commit -m "Modifiche fatte per testare sul ramo"

[branch_for_creating_merge_conflict 9c5e88a] Modifiche fatte per testare sul ramo

1 file modificato, 2 inserimenti(+)

Torna di nuovo al ramo principale. Esegui le modifiche sul file di test sulla riga tre con alcuni comandi diversi e confermalo.

Passaggio al ramo principale:

$ git checkout master

Passato al ramo 'master'. Modifica il file di prova.

Questa è una modifica sul ramo principale.

Conferma la modifica:

$ git aggiungi test.md

$ git commit -m "Modifiche fatte per testare sul ramo principale"

[master 7ea1985] Modifiche fatte per testare sul ramo master

1 file modificato, 2 inserimenti(+)

Unisci il ramo nel master per vedere l'errore:

$ git ramo

branch_for_creating_merge_conflict

* maestro

$ git merge branch_for_creating_merge_conflict

Unione automatica test.md

CONFLITTO (contenuto): unisci il conflitto in test.md

Unione automatica non riuscita; correggere i conflitti e quindi eseguire il commit del risultato.

Ora, vai nel file di test, come chiede Git, per vedere come appare:

Questo è un nuovo file di prova

<<<<<<< TESTA

Questa è una modifica sul ramo principale

=======

Questa è una modifica sul ramo

>>>>>>> branch_for_creating_merge_conflict

Come puoi vedere, Git ha aggiunto della sintassi nel tuo file test.md per informarti del conflitto. Questa sintassi include sette > caratteri e sette < caratteri, separati da sette segni di uguale.

Questo viene mantenuto in questo modo in modo da poter eseguire facilmente un ctrl+f per trovare esattamente dove è necessario apportare le modifiche richieste per risolvere i conflitti di unione. Se noti il ​​blocco sopra, ti renderai conto che ci sono due sezioni distinte qui:

  • I caratteri < indicano al programmatore le modifiche del ramo esistente, in questo caso "HEAD". Head è anche un'altra parola che viene spesso usata per denotare il ramo attuale e i segni di uguale denotano la fine della prima sezione.
  • La seconda sezione è dove esistono le modifiche dal tentativo di unione. La seconda sezione inizia con segni di uguale e termina con > segni. Questa parte del file non è riuscita a unire correttamente, richiedendo l'attenzione dello sviluppatore.

Come sviluppatore che lavora su questo file, devi decidere cosa rimarrà nel file finale e cosa verrà eliminato. Apporta le modifiche necessarie, quindi chiudi il file.

Questo è un nuovo file di prova

Questa è una modifica sul ramo

Come puoi vedere, questo metodo mantiene le modifiche del ramo eliminando tutti i conflitti di unione da Git.

In conclusione

I conflitti di unione sono eventi comuni, soprattutto se stai lavorando a un progetto su larga scala con un team in remoto. Di conseguenza, se sei un aspirante sviluppatore di software, dovresti familiarizzare a fondo con Git e il suo funzionamento. In questo modo, ti ritroverai con scarpe comode quando dovrai lavorare in team di sviluppatori. La conoscenza di Git è fondamentale per gli sviluppatori poiché è uno degli strumenti di controllo della versione più utilizzati e più robusti. Ci auguriamo che questo articolo abbia chiarito i tuoi dubbi sui conflitti di fusione, su cosa sono e su come risolverli. Prendi questa conoscenza e prova a sperimentare con alcuni rami e unisci tu stesso i conflitti. In questo modo, saprai esattamente cosa deve essere fatto in quale scenario.

Lo sviluppo del software è un campo che prospera da più di 2-3 decenni e continuerà a farlo solo negli anni a venire. La ragione di ciò sono i puri progressi che stanno avvenendo nelle tecnologie e il modo in cui le tecnologie vengono gestite. Se sei entusiasta di sviluppare software o lavorare su prodotti software adatti alle masse, questo è il momento giusto per tuffarti a capofitto nel mondo dello sviluppo.

In upGrad, conosciamo i punti deboli degli studenti che cercano di migliorare le competenze in informatica e sviluppo di software. Abbiamo guidato e assistito oltre 40.000 studenti in oltre 85 paesi e li abbiamo aiutati a ottenere il lavoro dei loro sogni. I nostri corsi su software e tecnologia sono progettati e tenuti da leader del settore nello sviluppo di software. Collaborando con aziende e aziende, i nostri corsi ti forniscono una piattaforma per implementare rapidamente i tuoi apprendimenti e sviluppare un modello di lavoro per approfondire le tue conoscenze. Dai un'occhiata al nostro programma Executive PG in Software Development e fai salire alle stelle la tua carriera nello sviluppo di software!

È possibile ignorare i conflitti di unione in Git?

No, non puoi e non dovresti ignorare i conflitti di unione in Git. I conflitti di unione mostrano che qualcosa non va nel file. È tuo dovere apportare le correzioni richieste e informare Git delle modifiche che desideri davvero mantenere e di quelle che desideri eliminare.

Git può risolvere automaticamente i conflitti di unione?

No, Git non può risolvere automaticamente i conflitti di unione. Può puntare verso le sezioni in conflitto del file, ma spetta allo sviluppatore analizzare il file e apportare le modifiche richieste.

Come vengono risolti i conflitti di unione in Git?

Per risolvere i conflitti di unione, è necessario controllare il file che contiene i conflitti. Quindi, è necessario individuare i caratteri < nel file. In questo modo saprai dove si è verificato il conflitto. Quindi, puoi risolvere manualmente i conflitti e archiviare il file finale nel repository centrale.