Introduzione alla risoluzione del conflitto di unione in GIT

La gestione dei contributi per risolvere i conflitti tra più sviluppatori distribuiti è uno dei lavori principali dei sistemi di controllo della versione. Per risolvere i conflitti di unione, dobbiamo prima capire di cosa si tratta esattamente. Si presenta durante l'unione di diverse versioni dello stesso codice ed è gestito dal sistema di controllo della versione, principalmente quando uno sviluppatore elimina un file mentre qualche altro sviluppatore lo stava ancora modificando o quando più persone tentano di cambiare la stessa riga in un file. In questo articolo, scopriremo di più sui conflitti di unione di Git, quali sono le cause e come possono essere risolti.

Che cos'è Merge Conflict in GIT?

Git ha reso la fusione molto semplice poiché integra automaticamente le nuove modifiche usando il comando git merge. Ma in caso di conflitto, solo lo sviluppatore che si sta fondendo è a conoscenza del conflitto, mentre gli altri non lo sanno. Quindi, ciò che fa Git è, interrompe il processo di fusione e contrassegna i file come in conflitto. Lo sviluppatore quindi trova e risolve il conflitto. I conflitti durante l'unione possono verificarsi nei modi descritti di seguito:

  • Impossibile avviare l'unione

In caso di modifiche in sospeso nella directory di lavoro del progetto corrente, un'unione può fallire in quanto potrebbero essere sovrascritte dai commit durante la fusione. Ma può essere stabilizzato usando vari comandi git come git checkout / stash / reset / commit.

  • Errore durante la fusione

Se si verifica un errore durante l'unione, indica che esiste un conflitto tra il ramo che viene unito e il ramo corrente. Sebbene Git tenti di unire i file senza conflitti, ma se non è in grado di farlo, lascerà a te la risoluzione manuale.

Come creare un conflitto di unione file?

Facciamo un esempio per mostrare / risolvere i conflitti di unione in GIT utilizzando l'interfaccia Git della riga di comando.

$ mkdir git-merge-test
$ cd git-merge-test
$ git init
$ echo "Mess with this content" > new_merged.txt
$ git add new_merged.txt
$ git commit -am"Committed the earlier content"
(master (root-commit) d58f73b) Committed the earlier content
1 file changed, 1 insertion(+)
create mode 200548 new_merged.txt

Vediamo riga per riga cosa sta succedendo nello snippet di comandi sopra.

  • git-merge-test crea una nuova directory e inizializza un nuovo repository Git.
  • Quindi, crea un file di testo chiamato new_merged.txt con qualcosa scritto su di esso.
  • Aggiungi il testo appena creato al repository e quindi esegui il commit.

Ora abbiamo un nuovo repository con un ramo master e un file new_merged.txt con alcuni contenuti al suo interno. Quindi, creiamo un altro ramo che entrerà in conflitto con l'unione.

$ git checkout -b newbranch
$ echo "New content" > new_merged.txt
$ git commit -am"Same named file is edited to cause a conflict"
(newbranch 6282319) Same named file is edited to cause a conflict
1 file changed, 1 insertion(+), 1 deletion(-)

Per dirti in dettaglio, le righe sopra:

  • crea e controlla un newbranch chiamato newbranch.
  • sovrascrive il contenuto del file new_merged.txt.
  • e infine esegue il commit del contenuto appena creato.

Con il newbranch denominato un ramo, viene creato un commit che sovrascrive il contenuto in new_merged.txt

$ git checkout master
Switched to branch 'master'
$ echo "Append" >> new_merged.txt
$ git commit -am"Content appended new_merged.txt"
(master 24fbe3c) Content appended new_merged.txt
1 file changed, 1 insertion(+)

La sequenza di comandi di cui sopra non solo verifica il ramo principale, aggiunge il contenuto a new_merged.txt ma lo commette alla fine. Ora il nostro esempio ha 2 nuovi commit. Uno è nel ramo principale e ce n'è un altro nel Newbranch. Ora git unisci il newbranch per vedere cosa succede!

$ git merge newbranch
Auto-merging new_merged.txt
CONFLICT (content): Merge conflict in new_merged.txt
Automatic merge failed; fix conflicts and then commit the result.

Git ci mostra che il conflitto è apparso.

Risoluzione dei conflitti di unione in GIT

La modifica del file in conflitto è uno dei modi per rimuovere un conflitto di unione. Basta aprire il file in conflitto nell'editor e rimuovere i divisori del conflitto uno per uno. Una volta modificato, puoi usare git add per aggiungere il contenuto modificato. È possibile creare un nuovo commit eseguendo:

git commit -m "merged and resolved the conflict in "

Git assicura la risoluzione del conflitto e crea così una nuova unione impegnata per finalizzarlo. Alcuni dei comandi Git che aiutano a risolvere i conflitti di unione sono:

git log --merge

Il merge –abort passato con il comando git log produce un elenco di commit in conflitto tra i rami uniti.

git status

Aiuta a identificare i file in conflitto.

git diff

Aiuta a trovare differenze tra gli stati di un repository o di un file. Viene utilizzato per prevedere e prevenire i conflitti di unione. Alcuni strumenti come quelli indicati di seguito vengono utilizzati quando si avvia un errore di unione.

git reset --mixed

Viene utilizzato per annullare le modifiche apportate alla directory corrente.

git checkout

Viene utilizzato per annullare le modifiche ai file o, più frequentemente, per modificare i rami. Alcuni strumenti come quelli indicati di seguito vengono utilizzati quando sorgono conflitti durante un'unione.

git reset

Viene utilizzato per ripristinare i file in conflitto durante un conflitto di unione.

git merge --abort

Passare l'argomento –abort con git merge consente di uscire dal processo di unione e riportare il ramo al suo stato originale.

Vantaggi della risoluzione dei conflitti di unione Git

  • Viene utilizzato per creare, modificare, eliminare rami, file o repository senza conflitti.
  • Può essere utilizzato per unire diverse versioni del codice.
  • Aiuta anche ad apportare modifiche e alla verifica di filiali remote evitando contemporaneamente conflitti.
  • Aiuta a gestire e gestire le versioni senza conflitti.
  • Mantiene il repository e il processo puliti e leggibili.

Conclusione

Git ha molti usi ed è ampiamente utilizzato da sviluppatori, responsabili di prodotto e data scientist. I comandi Git sono molto efficaci e possono essere molto utili. Un conflitto in git si verifica quando due diversi rami tentano di modificare la stessa riga in un file o un file viene eliminato in un determinato ramo ma modificato in un altro. Git gestisce la maggior parte delle fusioni con successo con le sue funzionalità di fusione, ma può anche essere risolto manualmente usando strumenti come stato git, reset git, checkout git e registro Git.

Articoli consigliati

Questa è una guida per risolvere i conflitti di unione in GIT. Qui discutiamo come risolvere efficacemente i conflitti di unione Git con vari comandi insieme ai suoi vantaggi. Puoi anche consultare i nostri altri articoli suggeriti per saperne di più -

  1. Git Alternative con vantaggi
  2. Introduzione a Git Tools
  3. GitHub vs SVN - Principali differenze
  4. Le 11 migliori domande per l'intervista a GIT
  5. Git Push
  6. Versioni del tableau
  7. Guida completa al comando remoto Git
  8. Tre fasi del ciclo di vita di Git con il flusso di lavoro

Categoria: