Способ воспроизвести проблему
использует файл слова, чтобы вызвать ошибку слияния. Вот как воспроизвести проблему:
создать репо a
:
mkdir a
cd a
git init
создать a/alpha.docx
и сохранить его, затем продолжить с
git add alpha.docx
git commit -m "initial alpha commit"
Создать репо b
с удаленным a
:
cd ..
mkdir b
cd b
git clone ../a
Измените a/alpha.docx
и сохраните его, затем продолжите с
cd ../a
touch beta # create some file
git commit -am "modified alpha"
Откройте b/alpha.docx
в слове и начните что-то печатать. Не сохраняйте это. Это помечает файл как занятый.
cd ../b
git pull
Это создаст файл b/beta
, а затем прервет слияние с этой ошибкой:
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /cygdrive/c/tmp2/b/../a
a797c43..5c6796e master -> origin/master
Updating a797c43..5c6796e
error: unable to unlink old 'alpha.docx': Device or resource busy
Если вы сейчас попытаетесь снова потянуть, после закрытия слова и отмены локальных изменений, это произойдет:
$ git pull
Updating a797c43..5c6796e
error: The following untracked working tree files would be overwritten by merge:
beta
Please move or remove them before you merge.
Aborting
Как с этим бороться
Путь 1
git reset --hard HEAD
git clean -f -d
git pull
как предложено здесь
Путь 2
git add -A
git stash
git pull
git stash drop # optional
Почему это
Я не знаю. Рекомендуем редактировать этот раздел, если вы знаете это.
Лично я ожидал, что git удалит все новые файлы при прерывании слияния.
Цитировать ответ Нуфа Ибрагима выше:
Новый коммит со всеми изменениями из исходной ветки создается в
площадка для постановки. В случае конфликта этот процесс обновления
область постановки прерывается и вам предоставляется контроль. Вот почему
это происходит.