498 Stimmen

Wie lässt sich feststellen, wann ein Git-Zweig erstellt wurde?

Gibt es eine Möglichkeit zu bestimmen wenn ein Git-Zweig erstellt wurde? Ich habe eine Verzweigung in meinem Repo und kann mich nicht daran erinnern, sie erstellt zu haben, und dachte, dass mir der Zeitstempel der Erstellung vielleicht auf die Sprünge helfen würde.

222voto

Aaron Punkte 2187

En in den Kommentaren hervorgehoben und in Antwort von Jackub solange Ihr Zweig jünger ist als die Anzahl der Tage, die in der Konfigurationseinstellung gc.reflogexpire (der Standardwert ist 90 Tage), dann können Sie Ihr Reflog verwenden, um herauszufinden, wann ein Zweigverweis zum ersten Mal erstellt wurde.

Beachten Sie, dass git reflog können die meisten git log Flaggen. Beachten Sie außerdem, dass die HEAD@{0} Stilselektoren sind eigentlich Zeitbegriffe und werden (in einer gehackten Art und Weise) als Datumsstrings behandelt. Das bedeutet, dass Sie das Flag --date=local und erhalten eine Ausgabe wie diese:

$ git reflog --date=local
763008c HEAD@{Fri Aug 20 10:09:18 2010}: pull : Fast-forward
f6cec0a HEAD@{Tue Aug 10 09:37:55 2010}: pull : Fast-forward
e9e70bc HEAD@{Thu Feb 4 02:51:10 2010}: pull : Fast forward
836f48c HEAD@{Thu Jan 21 14:08:14 2010}: checkout: moving from master to master
836f48c HEAD@{Thu Jan 21 14:08:10 2010}: pull : Fast forward
24bc734 HEAD@{Wed Jan 20 12:05:45 2010}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657 
74fca6a HEAD@{Wed Jan 20 11:55:43 2010}: checkout: moving from master to v2.6.31
24bc734 HEAD@{Wed Jan 20 11:44:42 2010}: pull : Fast forward
964fe08 HEAD@{Mon Oct 26 15:29:29 2009}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 
4a6908a HEAD@{Mon Oct 26 14:52:12 2009}: checkout: moving from master to v2.6.28

Gelegentlich kann es auch sinnvoll sein, die --date=relative :

$ git reflog --date=relative
763008c HEAD@{4 weeks ago}: pull : Fast-forward
f6cec0a HEAD@{6 weeks ago}: pull : Fast-forward
e9e70bc HEAD@{8 months ago}: pull : Fast forward
836f48c HEAD@{8 months ago}: checkout: moving from master to master
836f48c HEAD@{8 months ago}: pull : Fast forward
24bc734 HEAD@{8 months ago}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657 to master
74fca6a HEAD@{8 months ago}: checkout: moving from master to v2.6.31
24bc734 HEAD@{8 months ago}: pull : Fast forward
964fe08 HEAD@{11 months ago}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 to master
4a6908a HEAD@{11 months ago}: checkout: moving from master to v2.6.28

Ein letzter Hinweis: Die --all (eigentlich ein git-log-Flag, das von git-reflog verstanden wird), zeigt die Reflogs für alle bekannten Referenzen in refs/ (anstelle von einfach, HEAD ), die Ihnen die Verzweigungsereignisse deutlich anzeigt:

git reflog --date=local --all
860e4e4 refs/heads/master@{Sun Sep 19 23:00:30 2010}: commit: Second.
17695bc refs/heads/example\_branch@{Mon Sep 20 00:31:06 2010}: branch: Created from HEAD

193voto

Greg Bacon Punkte 127209

Verwenden Sie

git show --summary \`git merge-base foo master\`

Wenn Sie es lieber im Kontext mit gitk sehen möchten, dann verwenden Sie

gitk --all --select-commit=\`git merge-base foo master\`

(wobei foo der Name des gesuchten Zweigs ist).

Screenshot

96voto

yoyo Punkte 7630

Pro Git § 3.1 Git-Verzweigungen - Was eine Verzweigung ist hat eine gute Erklärung, was ein Git-Zweig wirklich ist

Ein Branch in Git ist einfach ein leichtgewichtiger, beweglicher Zeiger auf [einen] Commit.

Da ein Zweig nur ein leichter Zeiger ist, hat Git keine explizite Vorstellung von seiner Geschichte oder seinem Erstellungsdatum. "Aber Moment mal", höre ich Sie sagen, "natürlich kennt Git die Geschichte meines Zweigs!" Nun, irgendwie schon.

Wenn Sie einen der folgenden Punkte ausführen:

git log <branch> --not master
gitk <branch> --not master

sehen Sie etwas, das wie die "Historie Ihres Zweigs" aussieht, aber in Wirklichkeit eine Liste von Commits ist, die vom "Zweig" aus erreichbar sind, aber nicht vom Master aus erreicht werden können. Dies gibt Ihnen die gewünschten Informationen, aber nur, wenn Sie "branch" noch nie zurück nach master gemergt haben, und auch nicht master in "branch" gemergt haben, seit Sie es erstellt haben. Wenn Sie haben verschmelzen, dann wird diese Geschichte der Unterschiede zusammenbrechen.

Glücklicherweise enthält das Reflog oft die gewünschten Informationen, wie in verschiedenen anderen Antworten hier erläutert. Verwenden Sie dies:

git reflog --date=local <branch>

um den Verlauf der Verzweigung anzuzeigen. Der letzte Eintrag in dieser Liste ist (wahrscheinlich) der Punkt, an dem Sie den Zweig erstellt haben.

Wenn der Zweig gelöscht wurde, dann ist "branch" kein gültiger Git-Bezeichner mehr, aber Sie können stattdessen diesen verwenden, der vielleicht das findet, was Sie wollen:

git reflog --date=local | grep <branch>

Oder in einer Windows cmd-Shell:

git reflog --date=local | find "<branch>"

Beachten Sie, dass reflog nicht auf entfernten Zweigen funktioniert, sondern nur auf solchen, an denen Sie lokal gearbeitet haben.

47voto

Jakub Narębski Punkte 286531

Erstens, wenn Ihre Verzweigung innerhalb von gc.reflogexpire Tage (Standardwert 90 Tage, d. h. etwa 3 Monate), können Sie git log -g <branch> ou git reflog show <branch> um den ersten Eintrag in reflog zu finden, der das Erstellungsereignis ist, und der etwa wie folgt aussieht (für git log -g ) :

Reflog: <branch>@{<nn>} (C R Eator <creator@example.com>)
Reflog message: branch: Created from <some other branch>

Sie würden erfahren, wer einen Zweig erstellt hat, vor wie vielen Operationen und von welchem Zweig (es könnte auch nur "Erstellt von HEAD" lauten, was nicht sehr hilfreich ist).

Das ist es, was MikeSep sagte in seiner Antwort .


Zweitens, wenn Sie eine Zweigstelle für länger als gc.reflogexpire und Sie haben git gc (oder er wurde automatisch ausgeführt), müssten Sie einen gemeinsamen Vorfahren mit dem Zweig finden, aus dem er erstellt wurde. Werfen Sie einen Blick in die Konfigurationsdatei, vielleicht gibt es branch.<branchname>.merge der Ihnen sagen würde, auf welchem Zweig dieser Eintrag basiert.

Wenn Sie wissen, dass der fragliche Zweig aus dem Hauptzweig erstellt wurde (Abspaltung vom Hauptzweig), können Sie zum Beispiel den folgenden Befehl verwenden, um den gemeinsamen Vorgänger zu sehen:

git show $(git merge-base <branch> master)

Sie können auch versuchen git show-branch <branch> master als Alternative.

Das ist es, was gbacon sagte in seiner Antwort .

20voto

Mike Seplowitz Punkte 8897

Ich kenne den Git-Befehl dafür noch nicht, aber ich denke, man kann sie in den Reflogs finden.

.git/logs/refs/heads/<yourbranch>

Meine Dateien scheinen einen Unix-Zeitstempel zu enthalten.

Aktualisierung: Es scheint eine Option zu geben, die den Reflog-Verlauf anstelle des Commit-Verlaufs beim Drucken der Protokolle verwendet:

git log -g

Sie können dieses Protokoll auch bis zum Zeitpunkt der Erstellung des Zweigs zurückverfolgen. git log zeigt allerdings das Datum der Übergabe an, nicht das Datum, an dem Sie die Aktion durchgeführt haben, die zu einem Eintrag im Reflog führte. Ich habe das noch nicht herausgefunden, außer durch einen Blick in das eigentliche Reflog im obigen Pfad.

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