Может быть, это ограничение, поскольку вы не можете пройтись по наследству и reflog одной командой?
Совершенно верно.
Основная проблема здесьGit может добавлять эти декораторы меток (%d
для обычных декораций или %gD
для декораций селектора рефлогов) к коммитам, если он может найти декоратора.Чтобы позволить декораторам %d
работать, Git всегда считывает все ветви, теги и другие ссылочные имена.Но чтобы %gD
работал, Git должен прочитать записи reflog, и, если вы не используете --walk-reflogs
(или -g
для краткости), он вообще не читает записи reflog.Как только вы do используете -g
, он читает рефлоги, но останавливает просмотр графика коммитов.
Нет фундаментальной причины, по которой Git не может прочитать все рефлоги, если и когда %gD
появился в директивах форматирования, так что он может добавить эти декораторы, но это не так сегодня.
Существует отдельная, но не менее важная проблема, которая возникает, если и когда вы решите эту первую проблему: --graph
не может быть объединено с --no-walk
и --walk-reflogs
подразумевает --no-walk
(это отдельные внутренние функции обхода, и генерирующий граф код сильно зависит от использования средства просмотра истории, а не средства просмотра журнала).
(Лучшее, что вы можете сделать с текущим Git - это проанализировать вывод из git log
и одновременно прочитать все значения reflog. Затем вы можете написать свой собственный код для добавления меток reflog.)