Holen Sie sich den kurzen Git-Version-Hash


381

Gibt es eine sauberere Möglichkeit, den Kurzversions-Hash HEADvon Git zu erhalten?

Ich möchte die gleiche Ausgabe sehen, die ich bekomme von:

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

Ich habe ursprünglich den obigen Befehl verwendet, um eine Versionszeichenfolge zu generieren, aber das ist noch besser:

git describe --tags

Es werden Zeichenfolgen wie 0.1.12(getaggtes Commit) oder 0.1.11-5-g0c85fbc(fünf Commits nach dem Tag) ausgegeben .


2
Da Sie anscheinend gut darin sind, Daten mit Pipes und so weiter zu manipulieren, sollten Sie sich mit Git-Aliasen auskennen . In diesem Fall gibt es einen Befehl für das, was Sie wollen (siehe Antworten), aber irgendwann werden Sie etwas finden, wo es keinen gibt, und Aliase sind dafür großartig.
MatrixFrog

@ MatrixFrog danke für den Tipp! Ich hatte bereits einige einfache Git-Aliase, aber ich wusste bis jetzt nicht, wie mächtig sie sein können. Besonders gut gefällt mir das Graphviz-Display.
Attila O.

1
Huh. Wenn ich starte, git describe --tagserhalte ich die Meldung "Schwerwiegend: Keine Namen gefunden, kann nichts beschreiben." .
Quinn Comendant

@QuinnComendant Sie müssen wahrscheinlich zuerst etwas markieren, damit --tagses funktioniert. Versuchen Sie zuerst , ein Tag zu erstellen . zB git tag 1.0.0.
Attila O.

Antworten:


696

Versuche dies:

git rev-parse --short HEAD

Der Befehl git rev-parsekann eine bemerkenswerte Anzahl verschiedener Dinge tun, daher müssen Sie die Dokumentation sehr sorgfältig durchgehen, um dies zu erkennen.


4
Sie können das Gegenteil tun und den Long-Commit-Hash aus dem Short-Commit-Hash abrufen, indem Sie Folgendes tungit rev-parse HEAD
Andy

9
Der Befehl funktioniert auch mit langen U - IDs, wie Kopieren kleistert von den anderen Quellen git log, zB git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18fErträge97dd2ae
chiborg

3
Es funktioniert nur mit Referenzen. Sie können HEAD, Tag-Namen, Zweignamen oder einfache Hashes verwenden.
d12frosted

1
Achtung, dies gibt einen 7-Zeichen-Commit-Hash zurück (standardmäßig), während viele Orte wie gitlab 8 Zeichen verwenden!
Masterxilo

3
Sie können verwenden git rev-parse --short=8 HEAD, um die 8-Zeichen-Länge zu erhalten, die von GitLab verwendet wird. Sie können auch core.abbrev8 für ein bestimmtes Git-Repo mit einem Befehl wie git config core.abbrev 8 Source
n8felton

112

Sie können nahezu jedes gewünschte Format verwenden --pretty=format:

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

70
git log -1 --abbrev-commit

werde es auch tun.

git log --abbrev-commit

listet die Protokolleinträge mit der abgekürzten SHA-1-Prüfsumme auf.


1
Der zweite ist genau das, wonach ich gesucht habe! Sehr einfach zu merken und nützlich im täglichen Leben.
iFreilicht

Funktioniert auch mit git log --pretty=oneline, was im Gegensatz dazu --onelineansonsten Hashes in voller Größe druckt.
Sdaau

46

Eine einfache Möglichkeit, die Kurzversion des Git-Commits und die Git-Commit-Nachricht anzuzeigen, ist:

git log --oneline

Beachten Sie, dass dies eine Abkürzung für ist

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

1
- Online ist die beste Option
Juan Ignacio Barisich

1
@JuanIgnacioBarisich Die beste Option hängt davon ab, wie viele Informationen Sie anzeigen müssen. Wenn Sie mehr Informationen wie Autor oder Datum benötigen, ist git log --abbrev-commit eine bessere Option. Auch log --pretty ist möglicherweise eine bessere Option, um auszuwählen, welche Informationen protokolliert werden sollen
Geschwindigkeit

35

Ein wirklich einfacher Weg ist:

git describe --always

1
ha, süß, das befasst sich mit den Fällen, in denen git description sonst fehlschlägt (weil description irgendwo in der Geschichte ein Tag erwartet). thx
scharf

8
Nicht gut, wenn Sie den kurzen Hash unbedingt wollen - da dies ein kommentiertes Tag zurückgeben kann, gibt es eines.
Zitrax

In einigen Fällen git describe --longkönnte helfen. Aus den Dokumenten : " Geben Sie immer das Langformat (das Tag, die Anzahl der Commits und den abgekürzten Commit-Namen) aus, auch wenn es mit einem Tag übereinstimmt ." [meine Betonung]
djvg

Die Verwendung --longist besser, aber manchmal erhalten Sie einen kurzen Hash und manchmal 3 durch Bindestriche getrennte Elemente. In diesen Tagen verwende ich die akzeptierte Antwort. Früher wusste ich nichts über kommentierte Tags - vielleicht existierten sie gar nicht!
Steven Shaw

16

Zweig mit kurzem Hash und letztem Kommentar:

git branch -v

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

10

Ich habe Git Version 2.7.4 mit den folgenden Einstellungen:

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

Jetzt, wenn ich es tue:

git log --pretty=oneline

Ich erhalte eine abgekürzte Commit-ID mit acht Ziffern:

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

1
Während dieser Code die Frage möglicherweise beantwortet, würde die Bereitstellung eines zusätzlichen Kontexts darüber, wie und warum das Problem gelöst wird, den langfristigen Wert der Antwort verbessern.
SherylHohman

1
Großartige Idee. Schätzte es, Sheryl
Down the Stream

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.