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
Я столкнулся с этой ошибкой, когда я впервые нажал на репо не-ведущую ветвь.
Чтобы решить эту проблему, мне просто нужно было нажать мастер на репо и что это!