Git è uno dei più popolari sistemi di controllo del codice sorgente che consente ai professionisti dello sviluppo software in tutti i settori, consentendo a più membri del team di lavorare contemporaneamente su progetti.
Poiché molti utenti lavorano contemporaneamente da posizioni diverse sullo stesso file, tuttavia, potresti ritrovarti con un conflitto di unione. Questo articolo spiega le basi dei conflitti di unione Git e una delle operazioni avanzate di Git: la risoluzione di un conflitto di unione Git.Per prima cosa, esamineremo le basi di Git.
Cos’è Git?
Git è un sistema di controllo della versione distribuito (VCS) open source che ha un repository remoto sul lato server e un repository locale sul lato client. Ciò significa che il file o il codice non è presente in un server centrale, ma è presente una copia del file memorizzata sul computer del client.
Un sistema di controllo della versione distribuito consente a più sviluppatori di lavorare in parallelo tra loro senza conflitti di codice. Git consente agli sviluppatori di ripristinare e tornare a una versione precedente del codice ogni volta che è necessario.
Git aiuta sia gli sviluppatori che i professionisti non tecnologici tenendo traccia dei file di progetto. Rende più facile la collaborazione tra più persone e svolge un ruolo estremamente significativo nei grandi progetti che coinvolgono grandi team.
Comandi Git di base
- git config
- git init
- git aggiungi
- git diff
- git commit
- git reset
- stato git
- git merge
- git push
- git tirare
Che cos’è un conflitto di unione Git?
Un conflitto di unione è un evento che si verifica quando Git non è in grado di risolvere automaticamente le differenze nel codice tra due commit. Git può unire automaticamente le modifiche solo se i commit si trovano su righe o rami diversi.
Quello che segue è un esempio di come funziona un conflitto di unione Git:
Supponiamo che ci siano due sviluppatori: lo sviluppatore A e lo sviluppatore B. Entrambi estraggono lo stesso file di codice dal repository remoto e cercano di apportare varie modifiche a quel file. Dopo aver apportato le modifiche, lo sviluppatore A riporta il file al repository remoto dal proprio repository locale. Ora, quando lo sviluppatore B tenta di eseguire il push di quel file dopo aver apportato le modifiche dalla sua fine, non è in grado di farlo, poiché il file è già stato modificato nel repository remoto.
Per prevenire tali conflitti, gli sviluppatori lavorano in rami isolati separati. Il comando Git merge combina rami separati e risolve eventuali modifiche in conflitto.
Ora che abbiamo esaminato le basi del conflitto di unione Git, diamo un’occhiata ai vari tipi di conflitti in seguito.
Tipi di conflitti di unione di Git
Ci sono due punti in cui un’unione può entrare in uno stato di conflitto:
1. Avvio del processo di unione
Se sono presenti modifiche nell’area della fase della directory di lavoro per il progetto corrente, l’unione non verrà avviata.
In questo caso, si verificano conflitti a causa di modifiche in sospeso che devono essere stabilizzate utilizzando diversi comandi Git .
2. Durante il processo di fusione
L’errore durante il processo di unione indica che esiste un conflitto tra il ramo locale e il ramo da unire.
In questo caso, Git risolve il più possibile, ma ci sono cose che devono essere risolte manualmente nei file in conflitto.
Ora esamineremo la risoluzione dei conflitti di unione in Git.
Come risolvere i conflitti di unione in Git?
Ci sono alcuni passaggi che potrebbero ridurre i passaggi necessari per risolvere i conflitti di unione in Git.
- Il modo più semplice per risolvere un file in conflitto è aprirlo e apportare le modifiche necessarie
- Dopo aver modificato il file, possiamo usare il comando git add per mettere in scena il nuovo contenuto unito
- Il passaggio finale è creare un nuovo commit con l’aiuto del comando git commit
- Git creerà un nuovo commit di unione per finalizzare l’unione
Esaminiamo ora i comandi Git che possono svolgere un ruolo significativo nella risoluzione dei conflitti.
Comandi Git per risolvere i conflitti
1. git log –merge
Il comando git log –merge aiuta a produrre l’elenco dei commit che causano il conflitto
2. git diff
Il comando git diff aiuta a identificare le differenze tra i repository o i file degli stati
3. git checkout
Il comando git checkout viene utilizzato per annullare le modifiche apportate al file o per modificare i rami
4. git reset –mixed
Il comando git reset –mixed viene utilizzato per annullare le modifiche alla directory di lavoro e all’area di staging
5. git merge –abort
Il comando git merge –abort aiuta a uscire dal processo di unione e tornare allo stato prima dell’inizio dell’unione
6. git reset
Il comando git reset viene utilizzato al momento del conflitto di unione per ripristinare lo stato originale dei file in conflitto
Demo: risoluzione dei conflitti Git Merge
Innanzitutto, inizializza due repository:
git inizia A
git inizia B |
Aggiungi l’indirizzo remoto nel repository A:
git remote aggiungi origine *indirizzo* |
Il passaggio successivo consiste nel trasferire tutte le modifiche nel repository centrale nel repository locale.
git pull origin master |
Segui la stessa procedura per aggiungere l’origine nel repository B.
git remote aggiungi origine *indirizzo* |
Il comando pull viene eseguito nuovamente per recuperare tutto il contenuto dal repository remoto e spostarlo nel repository locale.
git pull origin master |
Entrambi questi repository rappresentano due diversi repository di due diversi sviluppatori.
Torniamo al repository A.
cd ../A |
Nel repository A, viene aperto un file readme per apportare varie modifiche.
vi LEGGIMI.md |
Apporta le modifiche necessarie al file, quindi salvalo.
Il comando git status viene quindi eseguito per vedere le modifiche riflesse.
stato git |
Il passaggio successivo consiste nell’aggiungere queste modifiche all’area di gestione temporanea e salvarle.
git aggiungi.
git commit -m *commit messaggio* |
git push origine master |
Ora, torna al repository B.
cd B |
Apri un file Leggimi
vi LEGGIMI.md |
Apporta modifiche al file, salvalo e chiudilo. Successivamente, aggiungi il file modificato e esegui il commit.
git aggiungi.
git commit -m *commit messaggio* |
Il passaggio successivo consiste nel inviare il file al repository remoto.
git push |
Viene visualizzato un errore, il che significa che gli aggiornamenti vengono rifiutati.
Successivamente, dobbiamo eseguire:
git — rebase origin master |
Attualmente sono presenti conflitti visibili che devono essere risolti manualmente.
Se vuoi saltare questo commit, puoi digitare git rebase –skip, o se vuoi interrompere questo rebase, puoi digitare git rebase –abort.
Dopo aver gestito manualmente questo conflitto, apriremo lo strumento di unione.
git mergetool |
Dopo aver immesso questo comando, tutti i file verranno elaborati.
Questi sono tutti i processi e le modifiche apportate al file.
Puoi vedere tre diversi file lì e puoi vedere tutto ciò che è stato aggiunto o rimosso.
Dopo lo scorrimento, puoi verificare dove si è verificato esattamente il conflitto.
Puoi quindi decidere se vuoi continuare con questo particolare file o meno. Procederò con la rimozione di quella linea.
Le modifiche manuali ci hanno permesso di risolvere i conflitti di file. Salva il file e chiudi il file finale.
Successivamente, eseguiremo:
git rebase –continua |
Ora, quando il conflitto è stato risolto, dobbiamo essere in grado di inviare il file al repository remoto.
Ora puoi controllare i commit nel tuo repository remoto.
Conclusione
Ci auguriamo che questo tutorial completo ti aiuti con i conflitti di unione di Git. Abbiamo esaminato le basi dei conflitti di unione, inclusi i tipi di conflitti di unione e le possibili spiegazioni per il loro verificarsi. Abbiamo anche fornito un esempio dettagliato attraverso una demo passo-passo. Nella demo, abbiamo visto come possiamo risolvere manualmente i conflitti di unione.