В настоящее время происходит то, что у вас есть определенный набор файлов, которые вы пытались объединить ранее, но они вызывают конфликты объединения. В идеале, если возникает конфликт слияния, он должен разрешить их вручную и зафиксировать изменения, используя 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'.
Обратите внимание, что file
now находится в неопрятном состоянии, и если мы сделаем 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