Да, это нормально для новых пустых (и не пустых) репозиториев.
Объяснение
HEAD
- это то, что Git называет символьной ссылкой —aссылка на другую ссылку.
В репозиториях, не являющихся открытыми, HEAD
обычно указывает, какая ветвь в настоящий момент извлечена.Новый коммит приведет к тому, что ветвь с именем HEAD
будет расширена для ссылки на новый коммит.Когда HEAD
ссылается на объект фиксации напрямую, а не на ветвь, он считается отсоединенным , что означает, что дальнейшие коммиты не приведут к тому, что ссылка на ветку будет расширена для ссылки на новые коммиты (опасно, потому что проверкадругой коммит или ветвь сделает новые коммиты недоступными для любой существующей ссылки, что затруднит их поиск и сборку мусора).
В пустых хранилищах HEAD
указывает ветку хранилища по умолчанию, так что вклон репозитория git checkout origin
эквивалентен git checkout origin/master
, если master
является веткой по умолчанию (подробности см. git help rev-parse
).
Когда Git инициализирует новый репозиторий, он инициализирует HEAD
дляобратитесь к refs/heads/master
(другими словами, HEAD
указывает на ветку master
по умолчанию).Тем не менее, он не создает ветку с именем master
, поскольку в хранилище нет коммитов, на которые master
еще может указывать.
Так что пока вы не создадите ветку master
или не измените HEAD
чтобы указать на ветвь, которая существует, вы получите эту ошибку при запуске команды, которая смотрит на HEAD
(например, git log
или git show
без каких-либо аргументов).
Вы все еще можетеиспользуйте команды, которые не проверяют HEAD
.Например:
git log some_branch_that_exists
Исправление
Чтобы избавиться от сообщения об ошибке, вы можете выполнить одно из следующих действий:
Изменить HEAD
чтобы указать на существующую ветку:
git symbolic-ref HEAD refs/heads/some_other_branch
- Вставить новую ветку
master
в хранилище откуда-то еще Создать новую master
локальная ветвь:
git branch master some_existing_commit
Визуализация
Для визуализации всего в хранилище я использую что-то вроде этого:
git log --graph --oneline --date-order --decorate --color --all
Обратите внимание, чтоКоманда выше будет работать, даже если HEAD
указывает на несуществующую ветвь.