Может ли git log --decorate однозначно сказать, отсоединена ли HEAD?

Я знаю, что на языке Git "отсоединенная ГОЛОВА" соответствует состоянию, в котором символическая ссылка HEAD не указывает ни на какую ветку. Я тоже знаю что git branchнапример, скажет мне, нахожусь ли я в состоянии отсоединенного HEAD, например

* (detached from 9a2ef02)
  master

или нет, например

* master

Тем не менее, я хотел бы знать, есть ли способ сделать вывод git log --decorate совершенно недвусмысленно относительно того, нахожусь ли я в отстраненном состоянии или нет. Вот пример, объясняющий, что я подразумеваю под "однозначным".

пример

Скажи я на master и моя история выглядит следующим образом:

4d860e9 (HEAD, master) Remove trailing whitespace
9a2ef02 Correct typo in header
f0badb5 Add to-do section to README

Случай 1: однозначное состояние обособленной головы

Если я бегу

git checkout 9a2ef02

тогда вывод git log --decorate --oneline является

9a2ef02 (HEAD) Correct typo in header
f0badb5 Add to-do section to README

Поскольку ссылка на ветку не указана рядом с HEAD в этом выводе я точно знаю, что у меня есть отдельная ГОЛОВА.

Случай 2: состояние отсоединенного ГОЛОВА или нет?

Тем не менее, если я бегу

git checkout 4d860e9

затем HEAD не указывает на master, но непосредственно, чтобы совершить 4d860e9, который master также указывает на; У меня отдельная ГОЛОВА. Тем не менее, нет никакого способа узнать из вывода git log --decorate --oneline,

4d860e9 (HEAD, master) Remove trailing whitespace
9a2ef02 Correct typo in header
f0badb5 Add to-do section to README

потому что это точно так же, как когда я на master,

Есть ли способ, через некоторые git log варианты, чтобы убрать эту двусмысленность? Я не нашел пути в git-log справочная страница...

2 ответа

Решение

С Git 2.4+ (2 квартал 2015 года), git log --decorate покажет точную ветвь, связанную с HEAD (или ее отсутствие, для отдельного HEAD).

Смотрите коммит 51ff0f2 от Junio ​​C Hamano ( gitster ):

log: украшать HEAD с названием филиала

В настоящее время в оформлении журнала не указано, какая ветвь проверена и HEAD отстранен

Когда филиал foo проверено, измените HEAD, foo "часть украшений" HEAD -> foo Msgstr "Это служит для того, чтобы указать как ссылки на декорации (которым помогает интервал), так и их отношения.

Как следствие, " HEAD " без всяких " -> "обозначает отдельный HEAD сейчас


Это означает, что примечания к выпуску 2.4 теперь включают следующие предупреждения о обратной совместимости:

Выход из " git log --decorate " (а также " %d "спецификатор формата, используемый в пользовательском формате" --format=<string> "параметр" git log "семья командных дублей) используется для списка" HEAD "как и другие подсказки имен веток, разделенные запятой между ними. Например,

$ git log --decorate -1 master
commit bdb0f6788fa5e3cacc4315e9ff318a27b2676ff4 (HEAD, master)
...

Этот выпуск немного обновляет вывод, когда HEAD ссылается на конец ветви, имя которой также отображается в выводе.
Выше показано как:

$ git log --decorate -1 master
commit bdb0f6788fa5e3cacc4315e9ff318a27b2676ff4 (HEAD -> master)
...

К сожалению нет. Я продолжаю желать git log"s --decorate использовал мой HEAD= синтаксис. Если это так, вы получите:

4d860e9 (HEAD, master) Remove trailing whitespace
9a2ef02 Correct typo in header
f0badb5 Add to-do section to README

когда вы несете голову под мышкой:

http://image.shutterstock.com/display_pic_with_logo/53755/53755,1189290972,1/stock-photo-a-beheaded-skeleton-carrying-a-glowing-pumpkin-head-under-his-arm-happy-halloween-isolated-on-5188306.jpg

но вы получите это вместо:

4d860e9 (HEAD=master) Remove trailing whitespace
9a2ef02 Correct typo in header
f0badb5 Add to-do section to README

когда вы не в режиме hallowe'en.

Другие вопросы по тегам