Как получить git commit хэш по номеру (--count) - PullRequest
0 голосов
/ 05 июля 2018

Я получаю позицию коммита по команде

git rev-list HEAD --count

Например, вывод - 1164. Я хочу оформить заказ на этот номер коммита. Как я могу это сделать? Я думаю, нужно получить хеш этого коммита и оформить коммит по этому хешу.

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Спасибо всем за ваши ответы, но это не то, что я искал. Я знаю, что использовать git --count не очень хорошая идея, но в данный момент мы помечаем наши билды этим методом.

Я пишу небольшой фрагмент bash, который делает то, что мне нужно.

#!/bin/bash
SEARCH=$1
LAST=$(git rev-list HEAD --count)
DIFF=$((LAST-SEARCH))
git rev-list --skip=$DIFF --topo-order HEAD | head -n1

Где SEARCH - это количество коммитов, которое вы ищете,

0 голосов
/ 29 мая 2019

Вот еще одно решение:

git rev-list HEAD --reverse | nl | grep <your build number>

git rev-list HEAD --reverse распечатывает все хэши коммитов от самых старых до самых новых. nl префикс каждой строки с номером строки (фактически count). И, наконец, хорошие grep фильтры фильтруют до нужной вам линии.

Вы могли бы уточнить это до хеша коммитов с помощью awk:

git rev-list HEAD --reverse | nl | grep <your build number> | awk '{print $2}'

или перейдите на следующий уровень с псевдонимом git:

git config --global alias.build-number '!f() { git rev-list HEAD --reverse | nl | grep $1 | awk '"'"'{print $2}'"'"'; }; f'

Использование псевдонима:

git build-number <your build number>

Это безумие цитирования в приведенной выше команде git config объясняется здесь: https://stackoverflow.com/a/1250279/320737

0 голосов
/ 05 июля 2018

Добавляя --count в командную строку git rev-list, вы указываете не отображать список ревизий, а только количество ревизий, которые он будет отображать без аргумента --count.

В основном git rev-list HEAD --count и git rev-list HEAD | wc -l дают одинаковый вывод (количество строк в выводе git rev-list HEAD).


Ответ на ваш вопрос зависит от того, что именно вы подразумеваете под "commit # 1164" .

Если вы считаете коммиты так, как они перечислены в rev-list, то первый коммит - это текущий коммит (он же HEAD), а коммит # 1164 - это самый старый коммит, который доступен начиная с HEAD. Чтобы получить его хеш, не говорите git rev-list, чтобы отобразить счетчик, но позвольте ему отображать ревизии (он отображает их хэши) и направьте свой вывод в tail -1, чтобы получить последний хеш в списке:

git rev-list HEAD | tail -1

Но учтите, что при добавлении нового коммита в текущую ветку нумерация изменится, и commit # 1164 будет другим коммитом.


Если считать коммиты в хронологическом порядке, commit # 1 будет первым коммитом, созданным в репозитории, тогда commit # 1164 будет текущим коммитом. В этом случае вам даже не нужно использовать git rev-list (он просматривает весь репозиторий, но вам это не нужно). Для этого достаточно использовать:

git rev-parse HEAD

, чтобы получить хэш текущего коммита (HEAD).


В любом случае полученный вами номер ( 1164 ) не имеет никакого отношения к Git и никак не связан с какими-либо коммитами. Если вы выберете другую ветку, которая имеет по крайней мере 1164 коммитов и выполните ту же процедуру, вы получите другой коммит, как commit # 1164 .

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