Как получить хеш для текущего коммита в Git? - PullRequest
1667 голосов
/ 04 июня 2009

Я бы хотел сохранить (на данный момент) возможность связывать наборы изменений Git с рабочими элементами, хранящимися в TFS.

Я уже написал инструмент (используя хук из Git), в котором я могу вставлять рабочие идентификаторы в сообщение набора изменений Git.

Однако я также хотел бы сохранить идентификатор коммита Git (хеш) в настраиваемом поле рабочего места TFS. Таким образом, я могу проверить рабочий элемент в TFS и посмотреть, какие наборы изменений Git связаны с рабочим элементом.

Как мне легко получить хеш из текущего коммита из Git?

Ответы [ 19 ]

2446 голосов
/ 04 июня 2009

Чтобы превратить произвольную расширенную ссылку на объект в SHA-1, используйте просто git-rev-parse , например

git rev-parse HEAD

или

git rev-parse --verify HEAD

Sidenote: Если вы хотите превратить ссылки ( ветви и теги ) в SHA-1 есть git show-ref и git for-each-ref.

379 голосов
/ 01 октября 2011

Если вам нужен только сокращенный хеш:

git log --pretty=format:'%h' -n 1

Кроме того, использование% H - это еще один способ получить длинный хэш.

130 голосов
/ 21 ноября 2011

Еще один, используя git log:

git log -1 --format="%H"

Это очень похоже на @outofculture, но немного короче.

87 голосов
/ 29 июля 2016

Чтобы получить полный SHA:

$ git rev-parse HEAD
cbf1b9a1be984a9f61b79a05f23b19f66d533537

Чтобы получить сокращенную версию:

$ git rev-parse --short HEAD
cbf1b9a
65 голосов
/ 16 октября 2012

Для полноты, так как никто еще не предложил это. .git/refs/heads/master - это файл, который содержит только одну строку: хэш последнего коммита master. Так что вы можете просто прочитать это оттуда.

Или как команда:

cat .git/refs/heads/master

Обновление:

Обратите внимание, что git теперь поддерживает сохранение некоторых ref-ссылок в файле pack-ref, а не в виде файла в папке / refs /head /. https://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html

44 голосов
/ 26 августа 2011

Всегда есть также git describe. По умолчанию выдает -

john@eleanor:/dev/shm/mpd/ncmpc/pkg (master)$ git describe --always
release-0.19-11-g7a68a75
36 голосов
/ 27 марта 2017

Подтвердить хэш

git show -s --format=%H

Сокращенный хэш коммита

git show -s --format=%h

Нажмите здесь , чтобы узнать больше git show примеров.

27 голосов
/ 04 июня 2009

Использование git rev-list --max-count=1 HEAD

20 голосов
/ 15 июля 2012

Если вам нужно сохранить хеш в переменной во время скрипта, вы можете использовать

last_commit=$(git rev-parse HEAD)

Или, если вам нужны только первые 10 символов (как это делает github.com)

last_commit=$(git rev-parse HEAD | cut -c1-10) 
14 голосов
/ 07 февраля 2014

Самый лаконичный способ, которым я знаю:

git show --pretty=%h 

Если вам нужно конкретное количество цифр хеша, вы можете добавить:

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