Показывать sha1 только с git журналом
Я хочу написать Bash script, который зацикливает на sha1s коммитов, выводимых вызовом git log
. Однако git log
дает мне гораздо больше результатов, чем я хочу:
commit 0375602ba2017ba8750a58e934b41153faee6fcb
Author: Mark Amery <[email protected]>
Date: Wed Jan 1 21:35:07 2014 +0000
Yet another commit message
This one even has newlines.
commit 4390ee9f4428c84bdbeb2fed0a461099a6c81b39
Author: Mark Amery <[email protected]>
Date: Wed Jan 1 21:30:19 2014 +0000
Second commit message.
commit bff53bfbc56485c4c1007b0884bb1c0d61a1cf71
Author: Mark Amery <[email protected]>
Date: Wed Jan 1 21:28:27 2014 +0000
First commit message.
Как я могу получить git log
только для вывода sha1s, чтобы я мог легко контактировать с ними?
Ответы
Ответ 1
Альтернативой git log --format
является команда git rev-list
. Для целей написания сценариев рекомендуемый выбор в качестве интерфейса можно полагать стабильным (хотя для простых целей, подобных этому, я был бы удивлен, если git log
недостаточно стабилен).
for sha1 in $(git rev-list HEAD) ; do
: # Do something with $sha1
done
Ответ 2
Вы можете использовать аргумент --format
с пользовательским форматом, который включает только sha1:
git log --format=format:%H
Вышеприведенная команда выводит результат следующим образом:
0375602ba2017ba8750a58e934b41153faee6fcb
4390ee9f4428c84bdbeb2fed0a461099a6c81b39
bff53bfbc56485c4c1007b0884bb1c0d61a1cf71
Вы можете перебрать хэшисы компиляции в Bash следующим образом:
for sha1 in $(git log --format=format:%H); do
: # Do something with $sha1
done
Это немного более подробно, чем с помощью git rev-list
, но может быть вашим единственным вариантом, если вы хотите использовать параметры упорядочения или фильтрации для git log
, которые не являются поддерживается git rev-list
, например -S
.