2777 Stimmen

Wie kann man den Hash für den aktuellen Commit in Git abrufen?

Ich möchte (vorerst) die Möglichkeit beibehalten, Git-Änderungssätze mit in TFS gespeicherten Workitems zu verknüpfen.

Ich habe bereits ein Tool geschrieben (mit einem Hook von Git), mit dem ich Workitem-Identifikatoren in die Nachricht eines Git Changesets einfügen kann.

Außerdem möchte ich den Hash der Git-Übertragung in einem benutzerdefinierten TFS-Workitem-Feld speichern. Auf diese Weise kann ich ein Workitem in TFS untersuchen und sehen, welche Git-Änderungssätze mit dem Workitem verbunden sind.

Wie kann ich den Hash des aktuellen Commits von Git einfach abrufen?

3 Stimmen

Verwenden Sie git log um die letzten Übertragungen abzurufen, die den vollständigen Übertragungshash anzeigen

23voto

Rado Punkte 8144

Ich brauchte etwas anderes: den vollständigen sha1-Wert der Übertragung anzeigen, aber ein Sternchen an das Ende anhängen, wenn das Arbeitsverzeichnis nicht sauber ist. Sofern ich nicht mehrere Befehle verwenden wollte, funktioniert keine der Optionen in den vorherigen Antworten.

Hier ist die eine Zeile, die das tut:
git describe --always --abbrev=0 --match "NOT A TAG" --dirty="*"
Ergebnis: f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe*

Erläuterung: beschreibt (mit Hilfe von kommentierten Tags) die aktuelle Übertragung, aber nur mit Tags, die "NOT A TAG" enthalten. Da Tags keine Leerzeichen enthalten dürfen, passt dies nie zu einem Tag und da wir ein Ergebnis anzeigen wollen --always fällt der Befehl zurück und zeigt die vollständige ( --abbrev=0 ) sha1 der Übertragung und fügt ein Sternchen an, wenn das Arbeitsverzeichnis --dirty .

Wenn Sie das Sternchen nicht anhängen wollen, funktioniert dies wie alle anderen Befehle in den vorherigen Antworten:
git describe --always --abbrev=0 --match "NOT A TAG"
Ergebnis: f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe

22voto

miraculixx Punkte 9373

Vielleicht möchten Sie einen Aliasnamen, damit Sie sich nicht an all die raffinierten Details erinnern müssen. Nachdem Sie einen der folgenden Schritte ausgeführt haben, können Sie einfach eintippen:

$ git lastcommit
49c03fc679ab11534e1b4b35687b1225c365c630

Anknüpfend an die akzeptierte Antwort gibt es zwei Möglichkeiten, dies einzurichten:

1) Bringen Sie Git den expliziten Weg bei, indem Sie die globale Konfiguration bearbeiten (meine ursprüngliche Antwort):

 # open the git config editor
 $ git config --global --edit
 # in the alias section, add
 ...
 [alias]
   lastcommit = rev-parse HEAD
 ...

2) Oder wenn Sie eine Abkürzung mögen, um Git eine Abkürzung beizubringen, wie kürzlich von Adrien kommentiert:

$ git config --global alias.lastcommit "rev-parse HEAD"

Verwenden Sie von nun an git lastcommit um den Hash der letzten Übertragung anzuzeigen.

20voto

Sergei Krivonos Punkte 3471

git rev-parse HEAD erfüllt den Zweck.

Wenn Sie die Daten speichern müssen, um sie später wieder auszugeben, ist es besser, die tatsächliche Verzweigung zu speichern, falls vorhanden:

cat .git/HEAD

Beispielhafte Ausgabe:

ref: refs/heads/master

Parsen Sie es:

cat .git/HEAD | sed "s/^.\+ \(.\+\)$/\1/g"

Wenn Sie Windows haben, können Sie wsl.exe verwenden:

wsl cat .git/HEAD | wsl sed "s/^.\+ \(.\+\)$/\1/g"

Ausgabe:

refs/heads/master

Dieser Wert kann später zum Auschecken mit Git verwendet werden, aber er wird auf seinen SHA verweisen. Um auf den aktuellen Zweig mit seinem Namen zu verweisen, tun Sie Folgendes:

wsl cat .git/HEAD | wsl sed "s/^.\+ \(.\+\)$/\1/g" | wsl sed "s/^refs\///g"  | wsl sed "s/^heads\///g"

Ausgabe:

master

17voto

Brian Peterson Punkte 2805

Das ist die prägnanteste Art, die ich kenne:

git show --pretty=%h 

Wenn Sie eine bestimmte Anzahl von Ziffern der Raute wünschen, können Sie diese hinzufügen:

--abbrev=n

12voto

kenorb Punkte 134883

Hier ist ein Einzeiler in der Bash-Shell mit direktem Lesen von Git-Dateien:

(head=($(<.git/HEAD)); cat .git/${head[1]})

Sie müssen den obigen Befehl in Ihrem Git-Root-Ordner ausführen.

Diese Methode kann nützlich sein, wenn Sie Repository-Dateien haben, aber git Befehl nicht installiert wurde.

Wenn es nicht klappt, melden Sie sich .git/refs/heads welche Art von Köpfen Sie haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X