Это немного неясно, но после вашего обновления кажется, что ваш главный вопрос:
Так есть ли способ просмотреть журнал каждого коммита (включая висячие коммиты, т.е. те, которые не связаны с каким-либоответвление / тег) либо с помощью git log, либо с помощью любой другой альтернативной команды / инструмента.
Краткий (и все еще в основном точный) ответ: не совсем.
Если у вас зафиксирован фиксированный коммит (т. Е. HEAD
отсоединен и отклонен от всех ссылок), вы можете увидеть эту историю.Вы можете просмотреть историю из reflogs
(локальная запись о том, где ветки вашего репо и HEAD
указывали в прошлом), чтобы увидеть историю, которая может быть недоступна ни из каких текущих ссылок.И есть другие подобные исключения.Вы могли бы даже дать git конкретный идентификатор коммита, чтобы увидеть историю, ведущую к этому коммиту.
Но так или иначе вы должны указать git log
, с чего начать его обход;он не предназначен для поиска висячих коммитов и начала прогулки там.
Прежде чем я последую этому выводу до конца - и причина, по которой "на самом деле" не только в основном правильная - я 'Я хотел бы отметить, что если у вас есть коммит, который не может быть достигнут --all
, то это вопрос времени, когда gc
вытащит ковер из-под этого коммита - потому что, насколько он может судить, такойкоммиты не используются.Большинство команд git
делают то же самое, что делает журнал: что полезные коммиты доступны из ссылок (веток, тегов и т. Д.), Поэтому даже если вы отключили gc
, чтобы избежать удаления таких коммитов (не очень хорошая идея), вы быпо-прежнему пытайтесь убедить git работать с ними навсегда.
Поэтому единственный разумный совет - не заводите привычку работать в автономном состоянии головы при создании кода, который вы хотите сохранить;и если вы пишете новые изменения, которые хотите сохранить, а затем понимаете, что находитесь в отстраненной голове, создайте ветку.
Но для технически более полного ответа я отмечу, чтоУ git есть одна команда, чья работа равна , чтобы найти оборванные коммиты.Вы можете использовать git fsck
, чтобы найти недоступные объекты (при условии, что они еще не были очищены gc
), а затем передать полученные значения идентификатора SHA в log
.Возможно, вы даже сможете настроить скрипт для этого.