Как ссылаться на первоначальную фиксацию?

У меня есть script, который должен ссылаться на первоначальную фиксацию в репозитории. git имеет специальную ссылку HEAD, но не имеет соответствующего TAIL. Я не могу найти ничего в git help rev-parse, который, казалось бы, мне помог.

Вот что я хотел бы сделать:

git show TAIL

Здесь один из вариантов:

git show `git log --reverse | if read a commit ; then echo $commit ; fi`

Это довольно хаки и зависит от вывода журнала git не меняется.

Сейчас я просто отмечаю начальную фиксацию и использую ее как свой refspec. Тем не менее, я бы хотел опубликовать общий инструмент, так что это не отличный вариант.

Ответ 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

Ответ 2

git rev-list HEAD | tail -n 1 является более стабильным вариантом.