Зараз відбувається те, що у вас є певний набір файлів, які ви намагалися об'єднати раніше, але вони викинули конфлікти злиття. В ідеалі, якщо у когось виникає конфлікт злиття, він повинен вирішити їх вручну та здійснити зміни, використовуючи 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