Существует ли специальное имя (например, HEAD, FETCH_HEAD) для корневого коммита в текущей ветви в репозитории git? - PullRequest
2 голосов
/ 01 октября 2010

Я обнаружил, что ссылаюсь на корневой коммит по разным причинам. Я обычно делаю тег под названием first или root, чтобы упростить его, но в последнее время я имел дело с довольно большим количеством репозиториев, и даже эта ручная маркировка становится довольно утомительной.

Есть ли простой способ ссылки на корневой коммит, похожий на HEAD или FETCH_HEAD?

Ответы [ 3 ]

3 голосов
/ 04 октября 2010

Чтобы найти идентификаторы SHA-1 всех корневых коммитов (начиная с любой локальной ветки) в репозитории git, вы можете использовать следующую команду:

$ git rev-list --parents --all |
  grep -v ' '

Затем вы можетеиспользуйте git show для их проверки.


Объяснение: git rev-list опция --parents позволяет печатать Разделенный пробелами список всех родителей коммита (в форме «коммит родителя…»).Поэтому, если у коммита есть какие-либо родители, строка из вызова git rev-list содержит хотя бы один пробел, отделяющий код коммита от его родительского идентификатора.

Опция --all означает, что git rev-list работает таквсе ссылки в refs/ перечислены в командной строке как <<em> commit >.

2 голосов
/ 01 октября 2010

В качестве единственного текущего решения я вижу только те теги, которые впервые имеют отношение к вам.
Таким образом, вы можете ссылаться на него через тег с хорошим именем, а не искать его SHA1 в журнале.

Примечание: в репозитории Git может быть несколько «корневых» коммитов (т.е. несколько коммитов без какого-либо родителя)
Например, эта тема , с Jakub Narębski ответ:

Не говоря уже о том, что в репозитории git может быть несколько корней (несколько коммитов без родителя).
Помимо независимых веток (например, man, html или todo), это обычно результат поглощения или объединения поддеревьев других проектов.
В ветке 'master' есть 5 или более корней: соединенные git-tools (mailinfo / mailsplit), поглощенные gitweb и объединенные поддеревья gitk и git-gui.

1 голос
/ 01 октября 2010

Не так просто, но вы можете получить sha "корня", который соответствует HEAD (родительский родитель родительского родительского элемента ... parent до тех пор, пока не будет достигнут коммит без родительского элемента), используя

git rev-list --topo-order --reverse HEAD | head -n 1

Работает на любой коммит на самом деле.Если существует несколько сходящихся путей истории, вы получите корень пути, в котором больше всего коммитов.

Хотя я не могу сказать, что вижу какое-либо применение для этого.Большинство вещей, у которых есть причины пересекать историю безграничной глубины прошлого, уже знают, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...