Это похоже на популярную ошибку по разным причинам.
У меня есть простой репозиторий git под названием "kiflea.git", я клонирую его вот так:
git clone git://kipdola.be/kiflea.git
Тогда git говорит мне: warning: remote HEAD refers to nonexistent ref, unable to checkout.
И да, на карте нет версионных файлов, кроме каталога .git. В любом случае, единственное, что мне нужно сделать, это:
cd kiflea
git checkout master
И работает, все файлы есть. Но я думал, что клонирование репо автоматически проверяет мастер, так что именно происходит и как это исправить?
Я заметил, что после того, как я сделаю git checkout master
бит, он добавляется в мой локальный файл конфигурации .git:
[branch "master"]
remote = origin
merge = refs/heads/master
Вероятно, интересно знать, что этот репозиторий git в далеком прошлом был репозиторием svn.
Ps: при просмотре голого репозитория с помощью gitweb явно есть master
ветка: http://kipdola.be/gitweb/?p=kiflea.git;a=summary
git ls-remote origin
вам показывает?checkout master
25f600739343a7ce32d6311a1e6140870774810b refs/heads/master
HEAD
. У вас есть к нему прямой доступ? Если да, то смотрите здесьgit clone -b master <url> <dir>
Ответы:
Это
warning: remote HEAD refers to nonexistent ref, unable to checkout.
означает, что удаленный (пустой) репозиторий содержит ссылку на ветку в названном файлеHEAD
, которая не соответствует ни одной опубликованной ветке в том же репозитории.Обратите внимание, что предупреждение означает только то, что git не выполнил проверку. В остальном клонированный репозиторий вполне подойдет. Просто сделайте это,
git branch -a
чтобы увидеть возможные ответвления и решитьgit checkout the-branch-you-want
проблему.Обычно это происходит потому, что содержимое по умолчанию для этого файла (
.git/HEAD
или обычноеHEAD
для пустых репозиториев)ref: refs/heads/master
гласит, что если кто-то собирается вclone
этот репозиторий, он должен по умолчанию клонировать веткуrefs/heads/master
. По умолчанию Git создаст локальную ветку безrefs/heads/
префикса (то естьmaster
по умолчанию). Попробуйте получитьgit help symbolic-ref
дополнительную информацию.Проблема с этой ситуацией заключается в том, что Git не предоставляет метод для изменения удаленных символических ссылок, поэтому либо вы используете то, что реализовал провайдер хостинга Git (например, Настройки - ветка по умолчанию в GitHub, если у вас есть права администратора), либо вы должны использовать имя ветки.
master
как ветвь по умолчанию (потому что это значение по умолчанию для этой символической ссылки).Если у вас есть оболочка доступа к удаленному мерзавцу репо, вы можете просто
cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
гдеXYZ
это название ветви вы хотите использовать по умолчанию.Один из способов решить эту проблему - создать новое удаленное голое репо без коммитов, а затем сделать это,
git push name-of-the-remote my-special-branch-name
что приведет к голому репозиторию, содержащему одну ветвь,my-special-branch-name
ноHEAD
символическая ссылка по-прежнему содержит значение по умолчанию, указывающее наmaster
. В результате вы получите указанное выше предупреждение.источник
checkout
. В остальном клонированный репозиторий вполне подойдет. Сделайте это,git branch -a
чтобы увидеть возможные ответвления иgit checkout the-branch-you-want
«исправить» проблему.git clone -b master
(или любого другого имени существующей ветки).cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
гдеXYZ
это имя ветки по умолчанию, которое вы хотите использовать, еслиgit clone
это делается без-b
флага. Если у вас возникла другая проблема, задайте новый вопрос вместо того, чтобы добавлять вопросы в качестве комментариев.У меня была такая же проблема, потому что я больше не использовал
master
ветку, и она потерялась как в моем локальном, так и в удаленном репозитории.Удаленный репозиторий все еще был
HEAD
установленmaster
, я изменил его на одну из удаленных веток, которые я действительно использую, и все работает нормально.Если у вас есть доступ к удаленному репозиторию:
remote_repo.git
;HEAD
файлref: refs/heads/master
наref: refs/heads/your_branch
источник
broken_branch
сrefs/heads/master
.cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
гдеXYZ
это имя ветки по умолчанию, которое вы хотите использовать, еслиgit clone
это делается без-b
флага, как я сказал в другом комментарии.Да, это связано с тем, что ваш клон git пытается проверить ветку, отличную от master. Просто сделай это
Это поможет вам клонировать точную ветку по ее имени.
источник
Несмотря на то, что эта ошибка отображалась - мой проект все еще был подключен к соответствующему репозиторию - я запустил
git branch
команду и увидел соответствующие ветки - затем я запустилgit checkout *branchname
и БУМ - все было хорошо.источник
Определенно что-то не так с вашим удаленным репозиторием. Возможно, вы сможете исправить это, создав новый клон репозитория. Также может сработать отправка нового коммита в основную ветку.
источник
Я предполагаю, что это ведущее
*
место в журнале фиксации, которое каким-то образом обманывает удаленный сервер.Я могу просматривать веб-интерфейс репо, используя некоторые ссылки меню, но другие не работают с помощью
404 - Unknown commit object
или аналогичными, особенно со страницы сводки.Посмотрите, можете ли вы изменить это последнее сообщение о фиксации, а затем принудительно нажмите на обновление, чтобы увидеть, исправляет ли это его. В демоне сервера может быть ошибка. Если это исправит, стоит сообщить о списке git git@vger.kernel.org (только текстовые сообщения)
источник
У меня была такая же проблема при создании голого репо.
Я решил это, просто клонировав репо, создав локальную главную ветку, а затем отправив мастер на удаленное репо.
1) клонировать репо
2) локально создать главную ветку.
3) совершить что-то в локальной ветке
4) Нажимаем локальный мастер на удаленном
источник
Если на самом деле нет основной доступной ветки, проверьте следующее; Если внутри папки .git есть файл с именем «pack-refs», откройте его, и вы сможете найти все перечисленные ссылки.
Что-то вроде ниже;
Затем используйте;
Или
чтобы проверить нужную версию. Спасибо.
источник
Я вроде исправил это с помощью:
Это создало мастер по умолчанию, а затем я мог проверить свои другие ветки
источник
В моем случае репо было пустым.
источник
Для Gitlab, даже если он показывает, что вы находитесь в ветке по умолчанию (например
master
), вы на самом деле можете не быть в ней, установив ее снова, исправьте это, например:asd
master
asd
master
asd
веткуГотово, теперь ваша ветка по умолчанию
master
источник