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