Как ссылаться на начальную фиксацию?


у меня есть скрипт, который должен ссылаться на первоначальный коммит в репозиторий. 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 101

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

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