Як посилатися на початковий комітет?


131

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

Ось що я хотів би зробити:

git show TAIL

Ось один із варіантів:

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

Це досить хакі - і залежить від того, чи не змінюється вихід журналу git.

Зараз я просто тегую початковий цикл і використовую це як мій погляд. Однак я хотів би випустити загальний інструмент, тому це не чудовий варіант.

Відповіді:


151

Не використовуйте 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 1.7.4.2 або новішої версії, ви можете скористатися --max-parentsопцією:

$ git rev-list --max-parents=0 HEAD

В іншому випадку ви можете отримати список усіх безкорисних (root) комісій, доступних з поточної гілки, використовуючи:

$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"

Для мене git rev-list HEAD | tail -n 1і git rev-list --max-parents=0 HEADне повертають однакове хеш-значення для мене. Той, хто використовує --max-parents=0, насправді отримує початкове зобов’язання. Просто подумав, що зазначу, що останній видається більш надійним.
jbranchaud

1
@Treebranch це може статися, якщо у вас є доручення із непарними часовими позначками. додавши --topo-orderдо цього rev-listслід виправити це, хоча я вважаю, що --max=parents=0відповідь найкраща.
1313

35

git rev-list HEAD | tail -n 1 є більш стабільним варіантом.


14
Це поверне один із хвостових комірок; може бути більше , ніж один корінь ( без батьків) здійснюють
Jakub Narębski

Ця відповідь спрацювала чудово і повернула лише одну фіксацію, тоді як git rev-list --max-parents=0 HEADповернула 3 коміти.
protoEvangelion

Хвост також не є командою, яка є за замовчуванням у Windows - працює і в GitBash на Windows. :)
Джонні Сковдал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.