Sincronizzazione dei Repository
Scorri per mostrare il menu
Come menzionato nel capitolo precedente, è necessario sincronizzare il branch locale con il repository remoto. Per farlo, occorre eseguire il comando git pull:
git pull
Quando è stato eseguito il comando git pull, Git ha recuperato gli aggiornamenti ma ha rilevato che i branch locale e remoto sono divergenti, ovvero ci sono modifiche su entrambi i branch che devono essere riconciliate. Git non ha potuto procedere perché deve sapere come gestire queste differenze, quindi impostiamo l'opzione merge ed eseguiamo nuovamente il comando git pull:
git config pull.rebase false
Tratteremo l'operazione di rebase più avanti in questo corso.
git pull
Git ha tentato di unire automaticamente le modifiche locali e remote a README.md, ma si è verificato un conflitto di merge. Esaminiamo l'albero dei commit, che indica dove si sono verificati divergenze e conflitti:
git log --graph --oneline --all
Risoluzione del conflitto
Come puoi vedere, il nostro commit locale attuale e il commit nel branch remote main condividono un antenato comune, ma divergono, portando al conflitto di merge che dobbiamo risolvere. Per farlo, apriremo il file README.md nell'editor Vim:
vim README.md
Per risolvere questo conflitto, è possibile entrare in modalità inserimento premendo i, rimuovere i marcatori di conflitto e combinare queste modifiche nel modo seguente:
Successivamente, premere il tasto Escape, digitare :wq e premere il tasto Invio per salvare le modifiche e uscire da Vim. Ora, per completare la fusione, il file README.md deve essere aggiunto all'area di staging e poi committato utilizzando i rispettivi comandi:
git add README.md
git commit
Dopo aver eseguito il comando git commit, si aprirà il text editor predefinito (molto probabilmente Vim). È possibile lasciare il messaggio di commit predefinito ed uscire da Vim nello stesso modo appena descritto, oppure modificare il messaggio e poi uscire.
Infine, è possibile eseguire in sicurezza il comando git push e verificare che il three-way merge sia stato completato con successo visualizzando l'albero dei commit:
git log --graph --oneline --all
Riepilogo delle operazioni svolte in questi due capitoli:
-
Simulazione della collaborazione apportando modifiche sia localmente che remotamente al file
README.md; -
Prima è stata effettuata una modifica direttamente sul repository remoto, poi è stata apportata una modifica diversa localmente;
-
Al tentativo di inviare le modifiche locali, si è verificato un conflitto perché il repository remoto conteneva aggiornamenti nuovi;
-
Per risolvere la situazione, sono state scaricate le modifiche dal repository remoto, generando un merge conflict;
-
Successivamente, il conflitto è stato risolto manualmente nel file
README.mdutilizzando l'editor Vim, le modifiche risolte sono state salvate e infine gli aggiornamenti finali sono stati inviati al repository remoto.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione