Finden Sie heraus, welches Commit derzeit in Git ausgecheckt ist

157

Ich bin mitten in einer git bisectSitzung.

Wie lautet der Befehl, um herauszufinden, auf welchem ​​Commit (SHA1-Hash) ich mich gerade befinde? git statusbietet dies nicht.

Bearbeiten: Ich denke, das Anrufen git logund Anschauen des ersten Eintrags funktioniert?

Steven Lu
quelle

Antworten:

173

Sie haben mindestens fünf verschiedene Möglichkeiten, um das Commit anzuzeigen, das Sie derzeit während einer git bisectSitzung in Ihrer Arbeitskopie ausgecheckt haben ( beachten Sie, dass die Optionen 1 bis 4 auch funktionieren, wenn Sie keine Halbierung durchführen ):

  1. git show.
  2. git log -1.
  3. Bash-Eingabeaufforderung.
  4. git status.
  5. git bisect visualize.

Ich werde jede Option unten im Detail erklären.

Option 1: Git Show

Wie in dieser Antwort auf die allgemeine Frage erläutert, wie Sie feststellen können, welches Commit Sie gerade ausgecheckt haben (nicht nur während git bisect), können Sie git showmit der -sOption die Patch-Ausgabe unterdrücken:

$ git show --oneline -s
a9874fd Merge branch 'epic-feature'

Option 2: Git Log -1

Sie können auch einfach git log -1herausfinden, auf welchem ​​Commit Sie sich gerade befinden.

$ git log -1 --oneline
c1abcde Add feature-003

Option 3: Bash-Eingabeaufforderung

Wenn Sie in Git Version 1.8.3+ (oder war es eine frühere Version?) Ihre Bash-Eingabeaufforderung so konfiguriert haben, dass der aktuelle Zweig, den Sie ausgecheckt haben, in Ihrer Arbeitskopie angezeigt wird, wird auch das aktuelle Commit angezeigt, das Sie überprüft haben während einer Halbierungssitzung oder wenn Sie sich in einem "losgelösten KOPF" -Zustand befinden. Im folgenden Beispiel habe ich derzeit c1abcdeausgecheckt:

# Prompt during a bisect
user ~ (c1abcde...)|BISECTING $

# Prompt at detached HEAD state 
user ~ (c1abcde...) $

Option 4: Git-Status

Ab Git-Version 1.8.3+ (und möglicherweise früher, wieder nicht sicher) git statuszeigt Ihnen das Ausführen auch, welches Commit Sie während einer Halbierung ausgecheckt haben und wenn Sie sich im getrennten HEAD-Status befinden:

$ git status
# HEAD detached at c1abcde <== RIGHT HERE

Option 5: Git-Halbierung visualisieren

Während Sie a ausführen git bisect, können Sie zum Starten auch einfach git bisect visualizeoder den integrierten Alias ​​verwenden git bisect view, um gitkgrafisch anzuzeigen, auf welchem ​​Commit Sie sich befinden und welche Commits Sie bisher als schlecht und gut markiert haben. Ich bin mir ziemlich sicher, dass dies lange vor Version 1.8.3 existierte. Ich bin mir nur nicht sicher, in welcher Version es eingeführt wurde:

git bisect visualize 
git bisect view # shorter, means same thing

Geben Sie hier die Bildbeschreibung ein

Gemeinschaft
quelle
Ordentlich. Als ich die Frage stellte, war ich nicht auf Git 1.8 und seitdem habe ich eine zsh-Eingabeaufforderung erhalten, die den Commit-Hash anzeigt. Ich denke, sie zeigt möglicherweise sogar einen speziellen Indikator speziell für, wenn ich halbiere, aber ich habe ' Seit ich diese Frage gestellt habe, habe ich eigentlich keine Halbierung mehr gemacht git log -p -S <search>.
Steven Lu
git statusDie Commit-ID wird nur angezeigt, wenn Sie sich im getrennten Zustand befinden. ansonsten heißt es "Auf Zweig was auch immer ". git showfunktioniert aber
Kip
87

Sie können einfach tun:

git rev-parse HEAD

Um es etwas näher zu erläutern: git rev-parseDies ist der grundlegende Befehl von git zum Interpretieren einer der exotischen Methoden, mit denen Sie den Namen eines Commits angeben können, und HEADein Verweis auf Ihr aktuelles Commit oder Ihren aktuellen Zweig. (In einer git bisectSitzung verweist es direkt auf ein Commit ("losgelöster HEAD") und nicht auf einen Zweig.)

Alternativ (und leichter zu merken) wäre es einfach zu tun:

git show

... zeigt standardmäßig das Commit an, HEADauf das verwiesen wird . Für eine präzisere Version können Sie Folgendes tun:

$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation
Mark Longair
quelle
3
Wenn Sie den Hash nur zur Verwendung an anderer Stelle erhalten möchten, ist git rev-parse HEADkeine Verarbeitung im Vergleich zu allen Müllalternativen erforderlich.
Nick T
17
$ git rev-parse HEAD
273cf91b4057366a560b9ddcee8fe58d4c21e6cb

Aktualisieren:

Alternativ (wenn Sie Tags haben):

(Gut für die Benennung einer Version, nicht sehr gut für die Rückgabe an git.)

$ git beschreiben
v0.1.49-localhost-ag-1-g273cf91

Oder (wie Mark vorgeschlagen hat, der Vollständigkeit halber hier auflisten):

$ git show --oneline -s
c0235b7 Autorotieren Sie hochgeladene Bilder basierend auf der EXIF-Ausrichtung
Alexander Gladysh
quelle
7
Sie haben nach einem SHA1 gefragt, nicht nach etwas, an das Sie sich leicht erinnern können. ;-)
Alexander Gladysh
Diese Version ist sehr nützlich, wenn Sie ein Skript überprüfen möchten
Daniele Licitra
12

Wenn Sie nur eine einfache Information extrahieren möchten, können Sie diese git showmit der --format=<string>Option abrufen ... und sie bitten, Ihnen den Unterschied nicht mit zu geben --no-patch. Dies bedeutet, dass Sie eine druckbare Ausgabe von allem erhalten können, was Sie möchten. Dies kann häufig ein einzelnes Feld sein.

Um nur den verkürzten Hash ( %h) zu erhalten, könnte man zum Beispiel sagen:

$ git show --format="%h" --no-patch
4b703eb

Wenn Sie dies in einer Umgebungsvariablen in bash speichern möchten (eine Sache, die die Leute wahrscheinlich tun möchten), können Sie die folgende $()Syntax verwenden :

$ GIT_COMMIT="$(git show --format="%h" --no-patch)"

$ echo $GIT_COMMIT
4b703eb

Die vollständige Liste der möglichen Aktionen finden Sie ingit show --help . Aber hier ist eine abgekürzte Liste von Eigenschaften, die nützlich sein könnten:

  • %H Hash begehen
  • %h abgekürzter Commit-Hash
  • %T Baumhasch
  • %t abgekürzter Baum-Hash
  • %P Eltern-Hashes
  • %p abgekürzte Eltern-Hashes
  • %an Autorenname
  • %ae Autor E-Mail
  • %at Autorendatum, UNIX-Zeitstempel
  • %aI Autorendatum, striktes ISO 8601-Format
  • %cn Name des Committers
  • %ce Committer-E-Mail
  • %ct Committer-Datum, UNIX-Zeitstempel
  • %cI Committer-Datum, striktes ISO 8601-Format
  • %s Gegenstand
  • %f bereinigte Betreffzeile, geeignet für einen Dateinamen
  • %gD Reflog-Selektor, z. B. refs / stash @ {1}
  • %gd verkürzter Reflog-Selektor, z. B. stash @ {1}
HostileFork sagt, vertraue SE nicht
quelle
Alle diese Formatierungsoptionen, hat aber shownichts für die Verzweigung .
bvj
2

Verwenden git showSie diese Option , um auch die Festschreibungsnachricht anzuzeigen, und verwenden Sie standardmäßig die aktuelle Festschreibungsnachricht, wenn keine Argumente angegeben werden.

asmeurer
quelle