Ответ 1
Не используйте git -log для сценариев: используйте git -rev-list или git -log с указанным настраиваемым форматом (опция --format = <sth> ).
В вашем вопросе есть дополнительная проблема: в репозитории может существовать более одного такой корневой фиксатор TAIL (фиксация без родителя) (даже если мы дисконтируем отключенные ветки, такие как "html", man 'и' todo 'в репозитории git.git). Обычно это результат объединения отдельных проектов в один или с использованием слияния поддерева отдельно разработанного подпроекта.
Например, репозиторий git имеет 6 корневых коммитов: git -gui, gitk (с поддеревом), gitweb (объединено, больше не разрабатывается отдельно), git почтовые инструменты (слияние очень рано в истории проекта), и p4-быстрый экспорт (возможно, случайный). Это не считается корнями ветвей html и "man", "удобных" ветвей, которые содержат предварительно сгенерированную документацию, и ветку todo с списком и скриптами TODO.
Вы можете получить список всех безболезненных (корневых) коммитов, доступных из текущей ветки, используя:
$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
Если у вас git 1.7.4.2 или новее, вы можете использовать новую опцию --max-parents
:
$ git rev-list --max-parents=0 HEAD