Wie erhalte ich den Hash für den aktuellen Commit in Git?

Lesezeit: 5 Minuten

Benutzer-Avatar
Sardaukar

Wie erhalte ich den Hash des aktuellen Commits in Git?

  • Verwenden git log zum Abrufen der letzten Commits, die den vollständigen Commit-Hash anzeigen

    – onmyway133

    15. März um 14:23 Uhr

Benutzer-Avatar
Jakub Narębski

Um eine beliebige erweiterte Objektreferenz in einen Hash umzuwandeln, verwenden Sie git-rev-parse:

git rev-parse HEAD

oder

git rev-parse --verify HEAD

So rufen Sie den kurzen Hash ab:

git rev-parse --short HEAD

Drehen Verweise (z.B Zweige und Tags) in Hashes, verwenden git show-ref und git for-each-ref.

  • --verify impliziert, dass: The parameter given must be usable as a single, valid object name. Otherwise barf and abort.

    – Linus Unnebäck

    24. Juli 2011 um 17:50 Uhr

  • git rev-parse --short HEAD gibt die Kurzversion des Hashs zurück, nur für den Fall, dass sich jemand wundert.

    – Thane Brimhall

    25. Oktober 2012 um 21:28 Uhr

  • Zusätzlich zu dem, was Thane gesagt hat, können Sie auch eine bestimmte Länge hinzufügen --shortwie zum Beispiel --short=12um eine bestimmte Anzahl von Ziffern aus dem Hash zu erhalten.

    – Tyson Phalp

    21. Februar 2014 um 17:18 Uhr

  • @TysonPhalp: --short=N handelt von minimal Anzahl an Ziffern; git verwendet eine größere Anzahl von Ziffern, wenn eine verkürzte von einem verkürzten anderen Commit nicht zu unterscheiden wäre. Versuch es zB git rev-parse --short=2 HEAD oder git log --oneline --abbrev=2.

    – Jakub Narębski

    21. Februar 2014 um 18:08 Uhr

  • Ergänzend zu dem, was Thane, Tyson und Jakub gesagt haben, können Sie den vollständigen Hash drucken, aber die Hexits hervorheben, die zur Identifizierung des Commit blau sind git rev-parse HEAD | GREP_COLORS='ms=34;1' grep $(git rev-parse --short=0 HEAD)

    – Zaz

    5. August 2014 um 16:44 Uhr

Benutzer-Avatar
außerhalb der Kultur

Um den verkürzten Commit-Hash zu erhalten, verwenden Sie die %h Formatbezeichner:

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

%H stellt den langen Commit-Hash dar. Ebenfalls, -1 kann direkt anstelle von verwendet werden -n 1.

  • Oder es scheint, dass das Hinzufügen von –short zum rev-parse-Befehl oben zu funktionieren scheint.

    – Außerkultur

    30. September 2011 um 23:39 Uhr

  • Ich finde git log ist Porzellan u git rev-parse ist Sanitär.

    – Amedée Van Gasse

    29. Januar 2016 um 10:40 Uhr

  • Dies ist eine schlechte/falsche Methode, da diese Methode Ihnen den falschen Hash liefert, wenn Sie einen abgetrennten Kopf haben. Wenn zum Beispiel der aktuelle Commit 12ab34 ist … und der vorherige Commit 33aa44 war … dann, wenn ich ‘git checkout 33aa44’ mache und dann Ihren Befehl ausführe, bekomme ich immer noch 12ab34 zurück … obwohl mein Kopf tatsächlich zeigt bis 33aa44…

    – der Fragemann

    17. Juli 2017 um 0:03 Uhr


  • @theQuestionMan Ich erlebe das von Ihnen beschriebene Verhalten nicht; git checkout 33aa44; git log -n 1 gibt mir 33aa44. Welche Git-Version verwendest du?

    – Außerkultur

    19. Juli 2017 um 17:32 Uhr

  • @AmedeeVanGasse, ah! ICH HATTE KEINE AHNUNG, das ist eine Toilettenanalogie! Ich habe gesehen porcelain in dem git man Seiten seit Jahren, hatte aber KEINE Ahnung, dass es sich um eine Toilette handelte! Das Porzellan ist die Toilette, und es ist “näher am Benutzer” (der bildlich auf dieser Toilette sitzt) als die Rohrleitungen, die sich auf einer niedrigeren Ebene und weiter vom Benutzer entfernt befinden – dh: unter dem “Porzellan”! Verblüfft.

    – Gabriel Staples

    21. Februar 2021 um 7:26 Uhr


Ein weiterer, der git log verwendet:

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

Es ist dem von @outofculture sehr ähnlich, wenn auch etwas kürzer.

  • Und das Ergebnis wird nicht in einfache Anführungszeichen gesetzt.

    – Krokusek

    28. Februar 2017 um 23:11 Uhr

  • Dies ist die richtige Antwort, da sie auch dann funktioniert, wenn Sie stattdessen einen bestimmten Commit auschecken HEAD.

    – Parsa

    22. Februar 2019 um 19:16 Uhr

  • @Parsa: beim Auschecken eines bestimmten Commits HEAD zeigt auf diesen Commit und nicht auf einen benannten Zweig, der bekannt ist als abgetrennter Kopf.

    – Christof Senn

    28. Januar 2020 um 20:46 Uhr

  • Von der Befehlszeile aus, um Pager zu vermeiden: git --no-pager log -1 --format="%H"

    – ederag

    9. Mai 2021 um 20:27 Uhr

  • @Parsa Ihr (fälschlicherweise positiv bewerteter?) Kommentar ist irreführend, da die akzeptierte Antwort von jakub-narębski ‘git rev-parse HEAD’ nach dem Auschecken woanders funktioniert.

    – laichen

    12. Mai um 14:54 Uhr

So erhalten Sie den vollständigen SHA:

$ git rev-parse HEAD
cbf1b9a1be984a9f61b79a05f23b19f66d533537

So erhalten Sie die gekürzte Version:

$ git rev-parse --short HEAD
cbf1b9a

Benutzer-Avatar
ecwpz91

Hash übergeben

git show -s --format=%H

Abgekürzter Commit-Hash

git show -s --format=%h

Das -s Flagge ist gleich wie --no-patch und steht für “Suppress diff output”.

Klicken hier für mehr git show Beispiele.

Benutzer-Avatar
Stich

Der Vollständigkeit halber, da es noch niemand vorgeschlagen hat. .git/refs/heads/master ist eine Datei, die nur eine Zeile enthält: den Hash des letzten Commits master. So konnte man es einfach von dort aus lesen.

Oder als Befehl:

cat .git/refs/heads/master

Aktualisieren:

Beachten Sie, dass git jetzt das Speichern einiger Head-Refs in der Pack-Ref-Datei statt als Datei im /refs/heads/-Ordner unterstützt. https://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html

Benutzer-Avatar
kayleeFrye_onDeck

Es gibt immer git describe auch. Standardmäßig gibt es Ihnen —

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

  • Git-Beschreibung gibt das erste TAG zurück, das von einem Commit aus erreichbar ist. Wie hilft mir das, den SHA zu bekommen?

    – Sardaukar

    9. September 2011 um 13:45 Uhr

  • Ich mag git describe --long --dirty --abbrev=10 --tags es wird mir etwas wie geben 7.2.0.Final-447-g65bf4ef2d4 das sind 447 Commits nach dem 7.2.0.Final-Tag und die ersten 10 Digests des globalen SHA-1 am aktuellen HEAD sind „65bf4ef2d4“. Dies ist sehr gut für Versionszeichenfolgen. Mit –long wird immer die Anzahl (-0-) und der Hash hinzugefügt, auch wenn das Tag zufällig genau übereinstimmt.

    – eckes

    9. April 2013 um 1:46 Uhr

  • Wenn dann keine Tags vorhanden sind git describe --always wird “eindeutig abgekürztes Commit-Objekt als Fallback anzeigen”

    – Ronny Andersson

    18. September 2014 um 16:57 Uhr

  • ich benutze git describe --tags --first-parent --abbrev=11 --long --dirty --always. Das --always Option bedeutet, dass es ein Ergebnis (Hash) liefert, auch wenn keine Tags vorhanden sind. Das --first-parent bedeutet, dass es nicht durch Merge-Commits verwirrt wird und nur Elementen im aktuellen Zweig folgt. Beachten Sie auch das --dirty wird anhängen -dirty zum Ergebnis, wenn der aktuelle Zweig nicht festgeschriebene Änderungen enthält.

    – hier

    31. Januar 2020 um 7:05 Uhr


1330400cookie-checkWie erhalte ich den Hash für den aktuellen Commit in Git?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy