Ответ 1
Обновленный ответ
Итак, получается, что для обновления локального представления репо, с которым указывает ветвь <remote>/HEAD
, вы можете иметь git автоматически получать эту информацию с пульта и устанавливать его локально для вас, вместо того, чтобы вручную установить его с помощью git symbolic-ref
, как в моем предыдущем решении выше:
git remote set-head <remote> --auto
# Or shorter
git remote set-head <remote> -a
Обратите внимание, что эта команда фактически не изменяет то, что ветвь по умолчанию находится на самом удаленном репо. Для этого вам, вероятно, понадобится использовать git symbolic-ref
непосредственно в удаленном репо, если у вас есть к нему доступ.
Старый ответ
Проблема, на которую ссылается сообщение об ошибке, заключается в том, что, по-видимому, libgit2 пытается прочитать удаленную ветку по умолчанию, на которую указывает refs/remotes/origin/HEAD
, но удаленная ветвь не существует, поэтому ошибка.
Используя git branch -a
, мое местное репо думает, что origin/develop
является удаленной ветвью по умолчанию:
remotes/origin/HEAD -> origin/develop
В какой-то момент origin/develop
действительно была ветвью по умолчанию в моем реестре origin
на GitHub, но это уже не ветка master
. Филиал develop
был удален из origin
, поскольку он больше не нужен.
Поэтому я исправил это, вручную обновив локальную ссылку origin/HEAD
, чтобы указать на новую ветку по умолчанию на origin
:
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
Или если я хотел бы также добавить сообщение в reflog для refs/remotes/origin/HEAD
:
git symbolic-ref -m "Update to new remote default branch" \
refs/remotes/origin/HEAD refs/remotes/origin/master
Это решило проблему. См. Также: