Как ссылаться на начальную фиксацию?
у меня есть скрипт, который должен ссылаться на первоначальный коммит в репозиторий. git имеет специальную ссылку HEAD
, но не имеет соответствующего TAIL
. Я ничего не могу найти в git help rev-parse
это, кажется, поможет мне.
вот что я хотел бы сделать:
git show TAIL
вот один вариант у меня есть:
git show `git log --reverse | if read a commit ; then echo $commit ; fi`
Это довольно хаки и зависит от выхода git log не меняется.
прямо сейчас я просто отмечаю начальную фиксацию и использовать его в качестве моего refspec. Тем не менее, я хотел бы выпустить общий инструмент, так что это не отличный вариант.
2 ответа:
не используйте git-log для сценариев: используйте либо git-rev-list, либо git-log с указанным пользовательским форматом ("--format=
опции"). есть дополнительная проблема с вашим вопросом: там может существовать более одного такая хвостовая корневая фиксация (parentless commit) в репозитории (даже если мы исключаем отключенные ветви, такие как "html", " man " и "todo" в git.репозиторий git.) Обычно это результат объединения отдельных проектов в один или использования поддерева слияние отдельно разработанного подпроекта.
например, репозиторий git имеет 6 корневых коммитов: Git-gui, gitk (объединенное поддерево), gitweb (объединено, больше не разрабатывается отдельно), git mail tools (объединено очень рано в истории проекта) и p4-fast-export (возможно, случайно). Это не считая корней ветвей "html" и "man", ветвей "удобство", которые содержат предварительно сгенерированную документацию, и ветви "todo" со списком TODO и скриптами.
вы можете получить список всех родительских (корневых) коммитов, доступных из текущей ветви с помощью:
$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
Если у вас есть git 1.7.4.2 или новее, вы можете использовать новый :
$ git rev-list --max-parents=0 HEAD