Ciò che sta accadendo attualmente è che hai un certo set di file, che hai provato a fondere in precedenza, ma hanno sollevato conflitti di unione. Idealmente, se si ottiene un conflitto di unione, dovrebbe risolverli manualmente e applicare le modifiche utilizzando git add file.name && git commit -m "removed merge conflicts"
. Ora, un altro utente ha aggiornato i file in questione sul suo repository e ha inviato le sue modifiche al repository upstream comune.
Accade così che i conflitti di unione tra (probabilmente) l'ultimo commit non siano stati risolti, quindi i file non vengono uniti correttamente e quindi il flag U
( unmerged
) per i file. Quindi ora, quando lo fai git pull
, git sta lanciando l'errore, perché hai una versione del file, che non è stata risolta correttamente.
Per risolvere questo problema, dovrai risolvere i conflitti di unione in questione e aggiungere e confermare le modifiche prima di poter eseguire un git pull
.
Riproduzione campione e risoluzione del problema:
# Note: commands below in format `CUURENT_WORKING_DIRECTORY $ command params`
Desktop $ cd test
Innanzitutto, creiamo la struttura del repository
test $ mkdir repo && cd repo && git init && touch file && git add file && git commit -m "msg"
repo $ cd .. && git clone repo repo_clone && cd repo_clone
repo_clone $ echo "text2" >> file && git add file && git commit -m "msg" && cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
Ora siamo in repo_clone e, se lo fai git pull
, si generano conflitti
repo_clone $ git pull origin master
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/anshulgoyal/Desktop/test/test/repo
* branch master -> FETCH_HEAD
24d5b2e..1a1aa70 master -> origin/master
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
Se ignoriamo i conflitti nel clone e ora facciamo più commit nel repository originale,
repo_clone $ cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
E poi facciamo un git pull
, otteniamo
repo_clone $ git pull
U file
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
Nota che file
ora è in uno stato non unito e se facciamo un git status
, possiamo vedere chiaramente lo stesso:
repo_clone $ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
(use "git pull" to merge the remote branch into yours)
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: file
Quindi, per risolvere questo problema, dobbiamo prima risolvere il conflitto di unione che abbiamo ignorato in precedenza
repo_clone $ vi file
e impostane il contenuto su
text2
text1
text1
e quindi aggiungerlo e confermare le modifiche
repo_clone $ git add file && git commit -m "resolved merge conflicts"
[master 39c3ba1] resolved merge conflicts