Зараз відбувається те, що у вас є певний набір файлів, які ви намагалися об'єднати раніше, але вони викинули конфлікти злиття. В ідеалі, якщо у когось виникає конфлікт злиття, він повинен вирішити їх вручну та здійснити зміни, використовуючи git add file.name && git commit -m "removed merge conflicts". Тепер інший користувач оновив файли, про які йдеться, у своєму сховищі та змінив свої зміни до загального репо-версії за потоком.
Так трапляється, що конфлікти ваших об'єднань з (мабуть) останньою фіксацією не були вирішені, тому ваші файли не об'єднані нормально, а значить U( unmerged) прапор для файлів. Отже, коли ви робите a git pull, git видаляє помилку, оскільки у вас є версія файлу, яка неправильно вирішена.
Щоб вирішити цю проблему, вам доведеться вирішити спірні конфлікти злиття та додати та здійснити зміни, перш ніж зробити це git pull.
Зразок відтворення та вирішення питання:
# Note: commands below in format `CUURENT_WORKING_DIRECTORY $ command params`
Desktop $ cd test
Спочатку давайте створимо структуру сховища
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
Зараз ми перебуваємо в repo_clone, і якщо ви зробите це git pull, це викличе конфлікти
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.
Якщо ми проігноруємо конфлікти в клоні та зробимо більше зобов’язань у оригінальному репо, зараз,
repo_clone $ cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
І тоді ми робимо git pull, ми отримуємо
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'.
Зауважте, що fileзараз перебуває в безперервному стані, і якщо ми зробимо це git status, ми можемо чітко бачити те саме:
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
Отже, щоб вирішити це, нам спочатку потрібно вирішити конфлікт злиття, який ми ігнорували раніше
repo_clone $ vi file
і встановіть його вміст
text2
text1
text1
а потім додайте його та введіть зміни
repo_clone $ git add file && git commit -m "resolved merge conflicts"
[master 39c3ba1] resolved merge conflicts