Git log и показать на голой репо

Я создал голый репозиторий на файловом сервере в своей локальной сети дома. После этого я нажал ветвь существующего репозитория с моего рабочего стола на этот новый удаленный репозиторий.

Нажатие работало отлично, и кажется, что все данные прибыли ( "w20 > branch -va" дает мне правильные данные). Но я не могу использовать git log или git show в голом репозитории. я получаю:

fatal: bad default revision 'HEAD'

или просто нет вывода

- это нормальная для голых репозиториев? Есть ли еще одна возможность визуализировать все?

Изменить: Неустранимая ошибка решена сейчас, но я не получаю выход из "git log" или "git log unstable". Такая же команда на настольном ПК отлично работает

Ответ 1

Да, это нормально для новых голых (и не голых) репозиториев.

Объяснение

HEAD - это то, что Git вызывает символическую ссылку — ссылку на другую ссылку.

В не-голых репозиториях 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

Fix

Чтобы избавиться от сообщения об ошибке, вы можете выполнить одно из следующих действий:

  • Измените 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 указывает на несуществующую ветвь.

Ответ 2

Обратите внимание, что это сообщение изменится с помощью Git 2.6 (Q3/Q4 2015)

См. commit ce11360 (29 августа 2015 г.) Джефф Кинг (peff).
(слияние Junio ​​C Hamano - gitster - в commit 699a0f3, 02 сентября 2015 г.)

Наконец, это сообщение будет более значимым:

log: более четко определить пустой HEAD

Если вы инициализируете или клонируете пустой репозиторий, исходное сообщение из "git log" не очень дружелюбное:

$ git init
Initialized empty Git repository in /home/peff/foo/.git/
$ git log
fatal: bad default revision 'HEAD'

Откроем эту ситуацию и напишем более дружественное сообщение:

$ git log
fatal: your current branch 'master' does not have any commits yet

Мы также обнаруживаем случай, когда "HEAD" указывает на сломанное ref; это должно быть еще менее распространено, но его легко увидеть. Обратите внимание, что мы не диагностируем все возможные случаи. Мы полагаемся на resolve_ref, что означает, что мы не получаем информацию о сложных случаях. Например, "--default master" будет использовать dwim_ref для поиска "refs/heads/master", но мы замечаем только, что "master" не существует.
Аналогично, сложное выражение sha1, подобное "--default HEAD^2", не будет разрешено как ref.

Но это нормально. В этих случаях мы возвращаемся к общему сообщению об ошибке, и они вряд ли будут использоваться в любом случае.
Захват пустой или сломанной "HEAD" улучшает общий случай, а другие случаи не регрессируются.

Ответ 3

Я столкнулся с этой ошибкой, когда я впервые нажал на репо не-ведущую ветвь.

Чтобы решить эту проблему, мне просто нужно было нажать мастер на репо и что это!