Risolvere conflitti… di merge

person encoding in laptop

Quando crei una pull-request, git confronta automaticamente la sorgente con il tuo aggiornamento e la destinazione con il codice originale. Se qualcun altro ha apportato modifiche alla destinazione allo stesso codice che hai toccato, non puoi eseguire il merge.

Per risolvere questi conflitti, estrai le modifiche nel tuo repository locale e risolvi i conflitti lì.

Risolvere il conflitto tra i rami Git

Questi passaggi includono dettagli per risolvere i conflitti tra due rami in un repository Git. Useremo come legenda queste definizioni:

  • La cartella del repository forkato: <repo_directory>
  • Il branch di destinazione: <destination_branch>
  • Il codice sorgente: <feature_branch>

Assicurati di essere nella directory del tuo repository.

$ cd ~/<repo_directory>


Ad esempio, se il nome del tuo repository è my-repository, il risultato potrebbe assomigliare a questo:

computer:$ cd ~/my-repository
computer:my-repository$


Scarica la versione più recente del repository da Git.

$ git pull


Passa al ramo di origine.

$ git checkout <feature_branch>


Estrai il ramo di destinazione nel ramo di origine. A questo punto, estrarre la destinazione cercherà di unirla con l’origine e mostrerà tutti i conflitti.

$ git pull origin <destination_branch>


Ad esempio, se il tuo ramo di destinazione è main, il risultato sarà qualcosa del genere:

computer:my-repository $ git pull origin main

branch main -> FETCH_HEAD
Auto-merging team_contact_info.txt
CONFLICT (content): Merge conflict in team_contact_info.txt
Automatic merge failed; fix conflicts and then commit the result.

Quando unisci due rami con conflitti localmente, otterrai marcatori di conflitto nel file quando apri il tuo editor.

Apri il file con il tuo editor preferito. Risolvi il conflitto facendo quanto segue:

  • Rimuovi le designazioni di modifica aggiunte da Git
  • Correggi il contenuto
  • Salva il file

Aggiungi e fai il commit delle modifiche.

$ git add .
$ git commit -m 'commit message'

Pubblica le modifiche nel remoto.

git push origin <feature_branch>


Quando controlli la richiesta di pull, la richiesta di pull sarà ancora aperta e non vedrai più alcun conflitto di merge.