wake-up-neo.com

Wie ermittle ich, wann ein Git-Zweig erstellt wurde?

Gibt es eine Möglichkeit, zu bestimmen, wann ein Git-Zweig erstellt wurde? Ich habe eine Filiale in meinem Repo und erinnere mich nicht daran, sie erstellt zu haben, und dachte, der Zeitstempel für die Erstellung würde mein Gedächtnis beflügeln.

281
paxos1977

Verwenden

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

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

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

(Wobei foo der Name der Niederlassung ist, nach der Sie suchen.)

Screenshot

133
Greg Bacon

Wie in den Kommentaren vermerkt und in Jackubs Antwort , solange Ihr Zweig jünger als die in der Konfigurationseinstellung gc.reflogexpire Festgelegte Anzahl von Tagen ist (der Standard ist 90 Tage), dann können Sie Ihr Reflog verwenden, um herauszufinden, wann eine Zweigreferenz zum ersten Mal erstellt wurde.

Beachten Sie, dass git reflog die meisten git log Flags annehmen kann. Beachten Sie außerdem, dass die [email protected]{0} - Stilselektoren tatsächlich Zeitbegriffe sind und tatsächlich (auf eine gehackte Art und Weise) als Datumszeichenfolgen behandelt werden. Dies bedeutet, dass Sie das Flag --date=local Verwenden und eine Ausgabe wie folgt erhalten können:

$ git reflog --date = local 
 763008c HEAD @ {Fri Aug 20 10:09:18 2010}: pull: Fast-forward 
 f6cec0a HEAD @ {Di Aug 10 09:37:55 2010}: Ziehen: Schnellvorlauf 
 E9e70bc HEAD @ {Do 4. Februar 02:51:10 2010}: Ziehen: Schnellvorlauf 
 836f48c HEAD @ {Do 21. Januar 14:08:14 2010 }: Checkout: Wechsel von Master zu Master 
 836f48c HEAD @ {Do 21.01. 14:08:10 2010}: Pull: Fast Forward 
 24bc734 HEAD @ {Mi 20.01. 12:05:45 2010}: Checkout: Wechsel von 74fca6a42863ffacaf7ba6f1936a9f228950f657 
 74fca6a HEAD @ {Wed Jan 20 11:55:43 2010}: Checkout: Wechsel von Master zu 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: Wechsel von Master zu v2.6.28 

Manchmal kann es auch nützlich sein, --date=relative Zu verwenden:

$ git reflog --date = relative 
 763008c HEAD @ {vor 4 Wochen}: pull: Fast-Forward 
 f6cec0a HEAD @ {vor 6 Wochen}: pull: Fast-Forward 
 e9e70bc HEAD @ {vor 8 Monaten}: Pull: Fast Forward 
 836f48c HEAD @ {vor 8 Monaten}: Checkout: Wechsel von Master zu Master 
 836f48c HEAD @ {vor 8 Monaten}: Pull : Schneller Vorlauf 
 24bc734 HEAD @ {vor 8 Monaten}: Checkout: Wechsel von 74fca6a42863ffacaf7ba6f1936a9f228950f657 zu Master 
 74fca6a HEAD @ {vor 8 Monaten}: Checkout: Wechsel von Master zu v2.6.31 
 24bc734 HEAD @ {vor 8 Monaten}: pull: Fast forward 
 964fe08 HEAD @ {vor 11 Monaten}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 to master 
 4a6908a HEAD @ {vor 11 Monaten}: checkout: Wechsel vom Master zu v2.6.28 

Eine letzte Anmerkung: Das Flag --all (Das ist wirklich ein Git-Log-Flag, das von Git-Reflog verstanden wird) zeigt die Reflogs für alle bekannten Refs in refs/ (Statt einfach HEAD), das Ihnen Branchenereignisse übersichtlich zeigt:

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: Erstellt von HEAD 
114
Aaron

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

Ein Zweig in Git ist einfach ein leichtgewichtiger beweglicher Zeiger auf [a] commit.

Da ein Zweig nur ein leichter Zeiger ist, hat git keine explizite Vorstellung von seinem Verlauf oder Erstellungsdatum. "Aber Moment", höre ich Sie sagen, "natürlich kennt git meine Filialgeschichte!" Naja, so ungefähr.

Wenn Sie eine der folgenden Aktionen ausführen:

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

sie werden sehen, wie die "Geschichte Ihrer Branche" aussieht, aber es handelt sich tatsächlich um eine Liste von Commits, die von "Branche" aus erreichbar sind und vom Master aus nicht erreichbar sind. Auf diese Weise erhalten Sie die gewünschten Informationen, jedoch nur dann, wenn Sie die Verzweigung nie wieder mit dem Master zusammengeführt haben und die Verzweigung seit Ihrer Erstellung nicht mehr mit dem Master zusammengeführt haben. Wenn Sie zusammengeführt haben , wird diese Historie der Unterschiede zusammenbrechen.

Glücklicherweise enthält das Reflog häufig die gewünschten Informationen, wie in verschiedenen anderen Antworten hier erläutert. Benutze das:

git reflog --date=local <branch>

die Geschichte der Branche zu zeigen. Der letzte Eintrag in dieser Liste ist (wahrscheinlich) der Punkt, an dem Sie den Zweig erstellt haben.

Wenn die Verzweigung gelöscht wurde, ist 'Verzweigung' keine gültige Git-Kennung mehr, sondern Sie können diese verwenden, um zu finden, 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 effektiv auf entfernten Zweigen funktioniert, sondern nur auf solchen, an denen Sie lokal gearbeitet haben.

46
yoyo

Wenn Ihre Filiale innerhalb von gc.reflogexpire Tagen erstellt wurde (Standard: 90 Tage, dh ca. 3 Monate), können Sie mit git log -g <branch> Oder git reflog show <branch> Den ersten Eintrag in reflog finden, der wäre ein Erstellungsereignis und sieht ungefähr so ​​aus (für git log -g):

Reflog: <branch>@{<nn>} (C R Eator <[email protected]>)
Reflog message: branch: Created from <some other branch>

Sie erhalten, wer einen Zweig erstellt hat, vor wie vielen Vorgängen und von welchem ​​Zweig (naja, es könnte sich um "Erstellt aus KOPF" handeln, was nicht viel hilft).

Das ist was sagte MikeSep in seiner Antwort .


Zweitens, wenn Sie einen Zweig länger als gc.reflogexpire Haben und git gc Ausgeführt haben (oder er wurde automatisch ausgeführt), müssten Sie einen gemeinsamen Vorfahren mit dem Zweig finden, aus dem er erstellt wurde. Schauen Sie sich die Konfigurationsdatei an, vielleicht gibt es einen branch.<branchname>.merge - Eintrag, der Ihnen sagt, auf welchem ​​Zweig dieser basiert.

Wenn Sie beispielsweise wissen, dass der betreffende Zweig außerhalb des Hauptzweigs erstellt wurde (Verzweigung vom Hauptzweig), können Sie den folgenden Befehl verwenden, um den gemeinsamen Vorfahren anzuzeigen:

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

Alternativ können Sie auch git show-branch <branch> master Versuchen.

Dies ist, was Gbacon sagte in seiner Antwort .

38
Jakub Narębski

Ich bin mir des git-Befehls noch nicht sicher, aber ich denke, Sie können sie in den Reflogs finden.

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

Meine Dateien scheinen einen Unix-Zeitstempel zu haben.

Update: Es scheint eine Option zu geben, die beim Drucken der Protokolle anstelle des Festschreibungsverlaufs verwendet wird:

git log -g

Sie können diesem Protokoll auch bis zu dem Zeitpunkt folgen, an dem Sie den Zweig erstellt haben. git log zeigt jedoch das Datum des Commits an, nicht das Datum, an dem Sie die Aktion ausgeführt haben, die einen Eintrag im Reflog vorgenommen hat. Ich habe das noch nicht gefunden, außer indem ich mir das aktuelle Reflog im Pfad oben anschaue.

18
Mike Seplowitz

Verwenden:

git reflog

um den gesamten Lebenszyklus Ihres Repositorys im aktuellen Ordner anzuzeigen. Der zuerst angezeigte Zweigname (von unten nach oben) ist die Quelle, die erstellt wurde.

855a3ce [email protected]{0}: checkout: moving from development to feature-sut-46
855a3ce [email protected]{1}: checkout: moving from feature-sut-46 to development
855a3ce [email protected]{2}: checkout: moving from feature-jira35 to feature-sut-46
535dd9d [email protected]{3}: checkout: moving from feature-sut-46 to feature-jira35
855a3ce [email protected]{4}: checkout: moving from development to feature-sut-46
855a3ce [email protected]{5}: checkout: moving from feature-jira35 to development
535dd9d [email protected]{6}: commit: insert the format for vendor specific brower - screen.css
855a3ce [email protected]{7}: checkout: moving from development to feature-jira35
855a3ce [email protected]{8}: checkout: moving from master to development

Das heißt:

  • Die Filialentwicklung wird vom Master aus erstellt (Checkout -b)

  • Der Zweig feature-jira35 wird aus der Entwicklung erstellt (checkout -b)

  • Der Zweig feature-jira-sut-46 wird aus der Entwicklung erstellt (checkout -b)

8
De Nguyen

Versuche dies

  git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
8

Dies ist etwas, das ich mir ausgedacht habe, bevor ich diesen Thread gefunden habe.

git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1
git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep 'branch:'
4
Andrew Sohn

Dieser Befehl zeigt das Erstellungsdatum des Zweigs dev von main an.

$git reflog show --date=iso dev
$7a2b33d [email protected]{2012-11-23 13:20:28 -2100}: branch: Created from main
2

Kombiniert mit der Antwort von Andrew Sohn ( https://stackoverflow.com/a/14265207/1929406 )

branchcreated=$(git reflog show --date=format:'%Y-%m-%d %H:%M:%S' --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1| cut -d'{' -f 2| cut -d'}' -f 1 | xargs)
echo $branchcreated
0
kivagant