Wie erhalte ich den Hash des aktuellen Commits in Git?
Wie erhalte ich den Hash für den aktuellen Commit in Git?
Sardaukar
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
--short
wie zum Beispiel--short=12
um 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 zBgit rev-parse --short=2 HEAD
odergit 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
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 ugit 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 mir33aa44
. 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 demgit
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
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.
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
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 geben7.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
Verwenden
git log
zum Abrufen der letzten Commits, die den vollständigen Commit-Hash anzeigen– onmyway133
15. März um 14:23 Uhr