Подтвердить что ты не робот

Показывать 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, чтобы я мог легко контактировать с ними?

4b9b3361

Ответ 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.