Вопрос по git – Как ссылаться на начальный коммит?

108

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

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

Error: User Rate Limit ExceededoneError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededgit rev-list --max-parents=0 HEADError: User Rate Limit Exceeded
127

используйте либо git-rev-list, либо git-log с указанным пользовательским форматом (& quot; - format =<sth>& Quot; опция).

Есть дополнительная проблема с вашим вопросом: может существоватьmore than one такая корневая фиксация TAIL (фиксация без родителей) в репозитории (даже если мы сбрасываем со счетов отключенные ветви, такие как «html», «man» и «todo» в репозитории git.git). Обычно это является результатом объединения отдельных проектов в один или использования объединения поддеревьев отдельно разработанного подпроекта.

Например, git-репозиторий имеет 6 корневых коммитов: git-gui, gitk (объединение в поддерево), gitweb (объединено, больше не разрабатывается отдельно), инструменты почтовой службы git (объединены очень рано в истории проекта) и p4-fast-export ( возможно случайно). Это не считая корней «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
Error: User Rate Limit Exceeded--topo-orderError: User Rate Limit Exceededrev-listError: User Rate Limit Exceeded--max=parents=0Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded--max-parentsError: User Rate Limit Exceeded
Error: User Rate Limit Exceededgit rev-list --max-parents=0 HEAD
Error: User Rate Limit Exceededgit rev-list HEAD | tail -n 1Error: User Rate Limit Exceededgit rev-list --max-parents=0 HEADError: User Rate Limit Exceeded--max-parents=0Error: User Rate Limit Exceeded

Похожие вопросы