Обновленный ответ
Получается, что с целью обновления представления локального репо, на которое указывает ветвь <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
Или, если бы я хотел добавить сообщение в журнал ссылок для refs/remotes/origin/HEAD
:
git symbolic-ref -m "Update to new remote default branch" \
refs/remotes/origin/HEAD refs/remotes/origin/master
Это решило проблему. Смотрите также:
- Документация для
git symbolic-ref
.
- Git: правильный способ изменения Активная ветвь в голом репозитории?.
- Как изменить удаленную HEAD Git так, чтобы она указывала на что-то помимо «master».
person
Community
schedule
02.09.2013