В настоящее время происходит то, что у вас есть определенный набор файлов, которые вы пытались объединить ранее, но они вызывают конфликты объединения. В идеале, если возникает конфликт слияния, он должен разрешить их вручную и зафиксировать изменения, используя git add file.name && git commit -m "removed merge conflicts". Теперь другой пользователь обновил соответствующие файлы в своем хранилище и внес свои изменения в общее репозиторий верхнего уровня.
Случилось так, что ваши конфликты слияния (вероятно) с последним коммитом не были разрешены, поэтому ваши файлы не слились правильно, и, следовательно, для файлов установлен флаг U( unmerged). Так что теперь, когда вы делаете 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'.
Обратите внимание, что filenow находится в неопрятном состоянии, и если мы сделаем a 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