Отримайте коротку хеш-версію Git


381

Чи є більш чіткий спосіб отримати хеш-версію короткої версії HEADвід Git?

Я хочу бачити той самий результат, що і я:

 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.
Аттіла О.

Відповіді:


696

Спробуйте це:

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.abbrev8 для конкретного git repo за допомогою такої команди, як git config core.abbrev 8 Source
n8felton


70
git log -1 --abbrev-commit

також це зроблять.

git log --abbrev-commit

відобразить записи журналу із скороченою контрольною сумою SHA-1.


1
Другий - саме те, що я шукав! Дуже просте запам’ятовування і корисне в повсякденному житті.
iFreilicht

Також працює з git log --pretty=oneline, що на відміну від цього --oneline, інакше друкує хеші повного розміру.
sdaau

46

Простий спосіб побачити коротку версію програми Git commit і повідомлення про присвоєння Git:

git log --oneline

Зауважте, що це скорочення для

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

1
--один варіант
Хуан Ігнасіо Барісіч

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

35

Дійсно простий спосіб - це:

git describe --always

1
га, милий, що вирішує випадки, коли опис git не вдасться інакше (тому що опис очікує тег десь в історії) thx
захоплюється

8
Не добре, якщо ви строго хочете, щоб короткий хеш - оскільки це може повернути помічений тег, є такий.
Zitrax

У деяких випадках це 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.