Получить короткую версию 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.
Аттила О.
Возможный дубликат git получит короткий хеш из обычного хеша
Cristian Ciupitu

Ответы:

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
репозитория
112

Вы можете сделать практически любой формат, который вы хотите с --pretty=format:

git log -1 --pretty=format:%h 
Карл Билефельдт
источник
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
Fabrice
источник
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
Отличная идея. Оценил это, Шерил
Вниз по течению
1

что насчет этого :

git log --pretty="%h %cD %cn %s"  

это показывает что-то вроде:

674cd0d Ср, 20 ноября 2019 12:15:38 +0000 Сообщение коммита Боба

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

скорость
источник