Жуткий журнал и шоу на голом репо - PullRequest
47 голосов
/ 02 июня 2011

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

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

fatal: bad default revision 'HEAD'

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

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

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

Ответы [ 3 ]

65 голосов
/ 11 июня 2011

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

Объяснение

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

2 голосов
/ 03 сентября 2015

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

См. commit ce11360 (29 августа 2015 г.) от Джефф Кинг (peff) .
(Объединено Junio ​​C Hamano - gitster - в коммит 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' указывает на сломанную ссылку; это должно быть еще реже, но это легко увидеть.
Обратите внимание, что мы не диагностируем все возможные случаи. Мы полагаемся на resolve_ref, что означает, что мы не получаем информацию о сложных случаях. Например, "--default master" будет использовать dwim_ref для поиска "refs/heads/master", но мы замечаем только, что "master" не существует.
Аналогично, сложное выражение sha1, такое как "--default HEAD^2", не будет разрешено как ссылка.

Но это нормально. Мы возвращаемся к общим сообщениям об ошибках в этих случаях, и они вряд ли будут использоваться в любом случае.
Поймание пустого или сломанного «ГОЛОВА» улучшает общий случай, а другие случаи не регрессируют.

0 голосов
/ 27 января 2017

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...