Вопрос: Как получить хеш для текущей фиксации в Git?


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

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

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

Как я могу легко получить хэш из текущей фиксации из Git?


1390


источник


Ответы:


Чтобы превратить произвольную ссылку на расширенный объект в SHA-1, используйте просто ГИТ-Rev-синтаксический анализ , например

git rev-parse HEAD

или

git rev-parse --verify HEAD

Примечание: Если вы хотите повернуть Рекомендации ( ветви а также теги ) в SHA-1, существует git show-refа также git for-each-ref,


2017



Если вы хотите только сократить хэш:

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

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


319



Другой, используя git log:

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

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


112



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

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

cat .git/refs/heads/master

Обновить:

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


61



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

$ git rev-parse HEAD
cbf1b9a1be984a9f61b79a05f23b19f66d533537

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

$ git rev-parse --short HEAD
cbf1b9a

54



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

john@eleanor:/dev/shm/mpd/ncmpc/pkg (master)$ git describe 
release-0.19-11-g7a68a75

34



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


24



Commit hash

git show -s --format=%H

Abbreviated commit hash

git show -s --format=%h

Click here for more git show examples.


24



If you need to store the hash in a variable during a script, you can use

last_commit=$(git rev-parse HEAD)

Or, if you only want the first 10 characters (like github.com does)

last_commit=$(git rev-parse HEAD | cut -c1-10) 

18



The most succinct way I know:

git show --pretty=%h 

If you want a specific number of digits of the hash you can add:

--abbrev=n

11



If you want the super-hacky way to do it:

cat .git/`cat .git/HEAD | cut -d \  -f 2`

Basically, git stores the location of HEAD in .git/HEAD, in the form ref: {path from .git}. This command reads that out, slices off the "ref: ", and reads out whatever file it pointed to.

This, of course, will fail in detached-head mode, as HEAD won't be "ref:...", but the hash itself - but you know, I don't think you expect that much smarts in your bash one-liners. If you don't think semicolons are cheating, though...

HASH="ref: HEAD"; while [[ $HASH == ref\:* ]]; do HASH="$(cat ".git/$(echo $HASH | cut -d \  -f 2)")"; done; echo $HASH

10