Получить короткую версию Git


382

Есть ли более чистый способ получить короткую версию хэша HEADGit?

Я хочу видеть тот же вывод, что и из:

 git log -n 1 | head -n 1 | sed -e 's/^commit //' | head -c 8

Первоначально я использовал приведенную выше команду для генерации строки версии, но это еще лучше:

git describe --tags

Он будет выводить строки, такие как 0.1.12( 0.1.11-5-g0c85fbcтэг коммит) или (пять коммитов после тэга).


2
Поскольку вы, кажется, хорошо умеете манипулировать данными с помощью каналов и так далее, вы должны знать о псевдонимах git . В этом случае есть команда для того, что вы хотите (см. Ответы), но в конечном итоге вы найдете то, чего нет, и псевдонимы отлично подходят для этого.
MatrixFrog

@ MatrixFrog спасибо за совет! У меня уже были некоторые простые псевдонимы git, но я не знал, насколько мощными они могут быть до сих пор. Мне особенно нравится отображение графика.
Аттила О.

1
Да. Когда я бегу, git describe --tagsя получаю сообщение: «Неустранимый: имена не найдены, ничего не могу описать». ,
Куинн Комендант

@QuinnComendant Вам, вероятно, нужно сначала что-то пометить, --tagsчтобы работать. Попробуйте сначала создать тег ; например git tag 1.0.0.
Аттила О.

Ответы:


697

Попробуй это:

git rev-parse --short HEAD

Команда git rev-parseможет делать множество разных вещей, поэтому вам нужно очень внимательно изучить документацию, чтобы определить это.


4
Вы можете сделать обратное и получить хеш длинного коммита из хэша короткого коммита, выполнив следующееgit rev-parse HEAD
Энди

9
Эта команда также работает с длинными идентификаторами Р, которые копирование вставкой из других источников , такие как git log, например , git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18fвозвращается97dd2ae
chiborg

3
Это просто работает со ссылками. Вы можете использовать HEAD, имена тегов, имена веток или простые хэши.
d12frosted

1
Предупреждение: по умолчанию возвращается 7-значный хеш коммита, в то время как во многих местах, таких как gitlab, используется 8 символов!
masterxilo

3
Вы можете использовать, git rev-parse --short=8 HEADчтобы получить длину 8 символов, которая используется GitLab. Вы также можете установить core.abbrevзначение 8 для определенного git config core.abbrev 8
репозитория


70
git log -1 --abbrev-commit

также сделаю это.

git log --abbrev-commit

перечислит записи журнала с сокращенной контрольной суммой SHA-1.


1
Второй - именно то, что я искал! Очень просто запомнить и полезно в повседневной жизни.
iFreilicht

Также работает с git log --pretty=oneline, который в отличие от --onelineдругих, печатает полноразмерные хэши.
Сдау

46

Простой способ увидеть короткую версию Git commit и сообщение Git commit:

git log --oneline

Обратите внимание, что это сокращение для

git log --pretty=oneline --abbrev-commit

1
--oneline - лучший вариант
Хуан Игнасио Барисич

1
@JuanIgnacioBarisich лучший вариант зависит от того, сколько информации вам нужно просмотреть. Если вам нужно больше информации, например, об авторе или дате, лучшим вариантом будет git log --abbrev-commit. Кроме того, журнал --pretty может быть лучшим вариантом, чтобы выбрать, какую информацию для записи
скорость

35

Действительно простой способ:

git describe --always

1
ха, сладкий, это касается случаев, когда git description потерпит неудачу в противном случае (потому что description ожидает тег где-то в истории) thx
keen

8
Не очень хорошо, если вы строго хотите короткий хеш - поскольку он может возвращать аннотированный тег, если он есть.
Цитракс

В некоторых случаях git describe --longможет помочь. Из документов : «Всегда выводить длинный формат (тег, количество коммитов и сокращенное имя коммита), даже если он соответствует тегу ». [мой акцент]
djvg

Использование --longлучше, но иногда вы получаете короткий хеш, а иногда 3 элемента, разделенных дефисами. В эти дни я использую принятый ответ. Когда-то я не знал о аннотированных тегах - возможно, их даже не было!
Стивен Шоу

16

Ветка с коротким хешем и последним комментарием:

git branch -v

  develop      717c2f9 [ahead 42] blabla
* master       2722bbe [ahead 1] bla

10

У меня Git версии 2.7.4 со следующими настройками:

git config --global log.abbrevcommit yes
git config --global core.abbrev 8

Теперь, когда я делаю:

git log --pretty=oneline

Я получаю сокращенный идентификатор фиксации из восьми цифр:

ed054a38 add project based .gitignore
30a3fa4c add ez version
0a6e9015 add logic for shifting days
af4ab954 add n days ago
...

1
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и почему он решает проблему, улучшит долгосрочную ценность ответа.
SherylHohman

1
Отличная идея. Оценил это, Шерил
Вниз по течению

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.