Ответ 1
У меня была эта проблема, и я решил ее, удалив файл .git/ORIG_HEAD, затем снова выполнив попытку. Файл .git/ORIG_HEAD был 0 байтами вместо ссылки git, которую он должен был содержать, поэтому я просто избавился от него.
потянув в мой репозиторий git с нашего центрального сервера, эта ошибка возникла:
$ git pull origin master
From http://aaa/repo
* branch master -> FETCH_HEAD
error: unable to resolve reference ORIG_HEAD: No such file or directory
fatal: Cannot lock the ref 'ORIG_HEAD'.
Я пробовал git gc (с --prune = now) и искал аналогичную ошибку, к сожалению, не повезло.
У меня была эта проблема, и я решил ее, удалив файл .git/ORIG_HEAD, затем снова выполнив попытку. Файл .git/ORIG_HEAD был 0 байтами вместо ссылки git, которую он должен был содержать, поэтому я просто избавился от него.
Проверьте git remote prune origin
, упомянутый в дополнение к git gc --prune=now
в разделе git pull
, не удалось выполнить "исправление ссылки" , "не удалось обновить локальную ссылку" ..
Если у вас есть .git/rebase-merge
, подумайте об удалении его (как в git rebase
и удаленных перезагружающихся ветках, вызвавших сообщение об ошибке "Interactive rebase уже началось" ")
Проверьте также содержимое .git/HEAD
, как в эту проблему.
Если это какая-то некорректная репо (см. "Git поврежденная ветвь мастера" ), попробуйте сначала снова клонировать ваше репо и повторно применить ваши текущие изменения поверх этого репо (через git format-patch
, если вам нужно)
Этот ответ не решает проблему ОП, но решает подобный.
У меня была аналогичная проблема (я получил error: cannot lock ref ... is at ... but expected ...
), но это было потому, что в репо с тем же именем было два ветки, но с другим случаем. Возможно, этот ответ мог помочь людям, которые пришли сюда, я не смог найти ответ в другом месте.
Я удалил одну из ветвей, а затем удалил соответствующую ссылку: .git/ref/.../branch_name
, затем git потянул. Это происходит из-за того, что я работаю над файловой системой, не учитывающей регистр, в то время как две ветки были нажаты на файловую систему, чувствительную к регистру.
Например, две ветки BRANCH1
и BRANCH1
, и оба они находятся под origin
remote. Сначала удалите одну из ветвей, например BRANCH1
. Затем удалите его ref:
rm .git/refs/remotes/origin/BRANCH1
Тогда git pull
, и это должно быть хорошо.
Этот файл создается, когда вы git pull
в репозитории, чтобы не git pull
в том же репозитории больше, чем в то время, и он удаляется, когда процесс завершен. Если процесс умирает или становится зомби, тогда файл не удаляется, и вы должны проверить вручную, если процесс git все еще существует. Если процесс не существует, вам необходимо удалить файл и снова попробовать git pull
.
Мне пришлось удалить .git/ORIG_HEAD.lock
, а не (просто) .git/ORIG_HEAD
.