Ich möchte eine Liste aller Zweige in einem Git-Repository mit den "frischesten" Zweigen oben erhalten, wobei der "frischeste" Zweig derjenige ist, für den zuletzt festgelegt wurde (und daher eher einer ist Ich möchte darauf achten).
Gibt es eine Möglichkeit, mit Git entweder (a) die Liste der Zweige nach dem letzten Festschreiben zu sortieren oder (b) eine Liste der Zweige zusammen mit dem Datum des letzten Festschreibens in einem maschinenlesbaren Format abzurufen?
Im schlimmsten Fall konnte ich immer git branch
eine Liste aller Zweige abrufen, deren Ausgabe analysieren und dann git log -n 1 branchname --format=format:%ci
für jeden das Festschreibungsdatum jedes Zweigs ermitteln. Dies läuft jedoch auf einer Windows-Box, auf der das Hochfahren eines neuen Prozesses relativ teuer ist. Daher kann das Starten der ausführbaren Git-Datei einmal pro Zweig langsam werden, wenn viele Zweige vorhanden sind. Gibt es eine Möglichkeit, dies alles mit einem einzigen Befehl zu tun?
quelle
git for-each-ref
von Jakub Narębski: Sie können entfernte Zweige passieren lassen,refs/remotes/
anstattrefs/heads/
(oder Sie können beide, durch Leerzeichen getrennt) passieren;refs/tags/
für Tags oder nurrefs/
für alle drei Arten.for-each-ref
! Sie werden direkt verwendengit branch --sort=-committerdate
: siehe meine Antwort untenAntworten:
Verwenden Sie die
--sort=-committerdate
Optiongit for-each-ref
;Auch verfügbar seit Git 2.7.0 für
git branch
:Grundlegende Verwendung:
Ergebnis:
Erweiterte Verwendung:
Ergebnis:
quelle
--format=%(refname)
.git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname) %(committerdate) %(authorname)' | sed 's/refs\/heads\///g'
:shortname
?git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/
. Die Manpage git-for-each-ref (1) lautet: Für einen nicht mehrdeutigen Kurznamen des Ref-Anhangs:short
.[alias]
Sektion und ich liebe es.br = for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'
Liste der Git-Filialnamen, sortiert nach dem letzten Commit…
Wenn Sie Jakubs Antwort und Joes Tipp erweitern , werden im Folgenden die "refs / Heads /" entfernt, sodass in der Ausgabe nur die Zweignamen angezeigt werden:
Befehl:
Ergebnis:
quelle
--format=%(refname:short)
anstatt sich darauf zu verlassencut
.git rb
git config --global alias.rb "for-each-ref --count=20 --sort=-committerdate refs/heads/ --format=\'%(refname:short)\'"
git branch
, sodass das Abrufen lokaler, entfernter oder aller Zweige wie bei git-branch (dh -r, -a) funktioniert.git branch -r --sort=committerdate --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'
Hier ist der optimale Code, der die beiden anderen Antworten kombiniert:
quelle
git for-each-ref --sort=-committerdate refs/heads/ --format='%(committerdate:short) %(authorname) %(refname:short)'
Hier ist ein einfacher Befehl, der alle Zweige mit den neuesten Commits auflistet:
Verwenden Sie, um nach dem letzten Commit zu bestellen
Quelle: http://git-scm.com/book/en/Git-Branching-Branch-Management
quelle
git branch -av
wenn Sie auch nicht lokale Filialen sehen möchten.git branch -v
das Datum jedes aufgelisteten Commits anzugeben?git branch -va --sort=-committerdate
zeige gerne nicht-lokale Filialen, wobei die zuletzt geänderten Filialen oben stehen.Ich benutze den folgenden Alias:
recent = "!r(){git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)'|column -ts'|'}; r"
welches produziert:
Verwenden Sie '|' zu trennen.
quelle
column -ts'|'
und Zeichen weiterleiten, wenn das Komma in relativen Zeitstempeln in Ihrem Gebietsschema vorkommen kann.'%(HEAD) ...'
am Anfang der Formatzeichenfolge hinzufügen , um den gleichen Effekt zu erzielen, ohne densed
Befehl zu leiten[alias] recent = !git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)'|column -ts'|'
git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always|column -ts'|'}
Ich konnte auf die vorherigen Beispiele verweisen, um etwas zu erstellen, das für mich am besten funktioniert.
quelle
git for-each-ref --sort=-committerdate refs/heads/ refs/remotes --format='%(authordate:short) %(authorname) %(color:red)%(objectname:short) %(color:yellow)%(refname:short)%(color:reset) (%(color:green)%(committerdate:relative)%(color:reset))'
Ich brauchte auch Farben, Tags und Fernreferenzen ohne Duplikate:
Da das Zitieren schwierig sein kann, ist hier der Alias für Bash:
quelle
| head -n20
am ende hinzuzufügen . Wenn Sie den Alias verwenden, stellen Sie sicher, dass dies in den Anführungszeichen steht.Die anderen Antworten scheinen es nicht zuzulassen
-vv
, dass eine ausführliche Ausgabe erfolgt.Hier ist also ein Einzeiler, der nach Festschreibungsdatum sortiert
git branch -vv
, Farbe beibehält usw.:Wenn Sie zusätzlich das Festschreibungsdatum drucken möchten, können Sie stattdessen diese Version verwenden:
Beispielausgabe:
Es ist wahrscheinlich besser lesbar, aufgeteilt in mehrere Zeilen:
Dies sollte auch mit anderen Argumenten funktionieren
git branch
, z. B.-vvr
um Fernverfolgungszweige aufzulisten oder-vva
um sowohl Fernverfolgungszweige als auch lokale Zweige aufzulisten.quelle
-vv
kann in der Tat nützlich sein, danke. Diese Lösung führt jedoch immer noch zu neuen Prozessen für jeden Zweig, die das OP vermeiden wollte.git branch
definiert nicht spezifisch die Bedeutung von-vv
, sondern nur von-v
,-vv
sollte also die gleiche haben wie-v
.-v, -vv, --verbose
enthält Folgendes:If given twice, print the name of the upstream branch, as well
2.7 git (Q4 2015) einführen wird Zweig mit Sortierung direkt
git branch
:Siehe begehen aa3bc55 , begehen aedcb7d , begehen 1511b22 , begehen f65f139 , ... (23. September 2015), verpflichten aedcb7d , begehen 1511b22 , begehen ca41799 (24. September 2015) und Commit f65f139 , ... (23. September 2015) von Karthik Nayak (
KarthikNayak
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 7f11b48 , 15. Oktober 2015)Legen Sie insbesondere aedcb7d fest :
Make ‚
branch.c
‘ Nutzung ‚ref-filter
‘ APIs für das Iterieren durch Sortierung Refs. Dadurch wird der größte Teil des Codes entfernt, der beimbranch.c
Ersetzen durch Aufrufe derref-filter
Bibliothek verwendet wird.Es fügt die Option hinzu
--sort=<key>
:Hier:
Oder (siehe unten mit Git 2.19)
Siehe auch Commit 9e46833 (30. Oktober 2015) von Karthik Nayak (
KarthikNayak
) .Mit freundlicher
gitster
Unterstützung von Junio C Hamano ( ) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 415095f , 3. November 2015)Mit Git 2.19 kann die Sortierreihenfolge standardmäßig festgelegt werden.
git branch
unterstützt eine Konfigurationbranch.sort
wiegit tag
, die bereits eine Konfiguration hattetag.sort
.Siehe Commit 560ae1c (16. August 2018) von Samuel Maftoul (``) .
(Zusammengeführt von Junio C Hamano -
gitster
- in Commit d89db6f , 27. August 2018)Verwenden Sie zum Auflisten entfernter Zweige
git branch -r --sort=objectsize
. Das-r
Flag bewirkt, dass entfernte Zweige anstelle lokaler Zweige aufgelistet werden.Mit Git 2.27 (Q2 2020) akzeptierten "
git branch
" und andere "for-each-ref
" Varianten mehrere--sort=<key>
Optionen in aufsteigender Rangfolge, es gab jedoch einige--ignore-case
Fehler bei der Handhabung und beim Brechen des Referenznamens, die behoben wurden.Siehe Commit 7c5045f , Commit 76f9e56 (03. Mai 2020) von Jeff King (
peff
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 6de1630 , 08. Mai 2020)quelle
-r
Ich verwende gerne ein relatives Datum und kürze den Filialnamen folgendermaßen:
Welches gibt Ihnen Ausgabe:
Ich empfehle, eine Bash-Datei zu erstellen, um alle Ihre Lieblings-Aliase hinzuzufügen und das Skript dann an Ihr Team weiterzugeben. Hier ist ein Beispiel, um nur dieses hinzuzufügen:
Dann können Sie dies einfach tun, um eine schön formatierte und sortierte lokale Zweigstellenliste zu erhalten:
Update: Tun Sie dies, wenn Sie färben möchten:
quelle
fatal: unknown field name: '-authordate:iso8601'
refs/heads
durchrefs/remotes
, um einen Blick auf entfernte Zweige zu werfen.expansion of alias 'branches' failed; 'echo' is not a git command
(echo ' ------------------------------------------------------------' && git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads && echo ' ------------------------------------------------------------') | grep --color -E "$(git rev-parse --abbrev-ref HEAD)$|$"
Ab Git 2.19 können Sie einfach:
Du kannst auch:
Wenn Sie also Zweige im aktuellen Repository auflisten, wird diese nach Committerdate sortiert aufgelistet.
Wenn Sie Zweige immer dann auflisten möchten, wenn Sie sie nach comitterdate sortieren möchten:
Haftungsausschluss: Ich bin der Autor dieser Funktion in Git und habe sie implementiert, als ich diese Frage sah.
quelle
Fügt etwas Farbe hinzu (da
pretty-format
nicht verfügbar)quelle
Ich hatte das gleiche Problem, also schrieb ich einen Ruby-Edelstein namens Twig . Es listet Zweige in chronologischer Reihenfolge auf (neueste zuerst) und Sie können auch ein maximales Alter festlegen, damit Sie nicht alle Zweige auflisten (wenn Sie viele davon haben). Zum Beispiel:
Außerdem können Sie benutzerdefinierte Eigenschaften für jeden Zweig speichern, z. B. Ticket-ID, Status, Aufgaben, und die Liste der Zweige nach diesen Eigenschaften filtern. Weitere Informationen: http://rondevera.github.io/twig/
quelle
Ich habe mir den folgenden Befehl ausgedacht (für Git 2.13 und höher):
Wenn Sie nicht haben
column
, können Sie die letzte Zeile durch ersetzenDie Ausgabe sieht aus wie
Ich habe einen Blog-Beitrag darüber geschrieben, wie die verschiedenen Stücke funktionieren.
quelle
git branch --sort
erwähnte verwendet .FYI, wenn Sie eine Liste der zuletzt bekommen möchte ausgecheckt Zweige (wie kürzlich begangen Gegensatz) können Sie Git reflog verwenden:
Siehe auch: Wie kann ich eine Liste der Git-Zweige erhalten, die ich kürzlich ausgecheckt habe?
quelle
Hier ist ein kleines Skript, mit dem ich zwischen den letzten Zweigen wechsle:
Verwenden dieser beiden Aliase:
Rufen Sie das einfach in einem Git-Repository auf, und es zeigt Ihnen die letzten N Zweige (standardmäßig 10) und jeweils eine Nummer beiseite. Geben Sie die Nummer des Zweigs ein und es wird ausgecheckt:
quelle
Normalerweise betrachten wir die entfernten Zweige in letzter Zeit. Also versuch das mal
quelle
Hier ist ein weiteres Skript, das genau das tut, was alle anderen Skripte tun. Tatsächlich bietet es eine Funktion für Ihre Shell.
Sein Beitrag ist, dass es einige Farben aus Ihrer Git-Konfiguration zieht (oder Standardeinstellungen verwendet).
quelle
Dies basiert auf der Version von saeedgnu , wobei jedoch der aktuelle Zweig mit einem Stern und in Farbe angezeigt wird und nur alles angezeigt wird, was vor "Monaten" oder "Jahren" nicht beschrieben wurde:
quelle
Mein bestes Ergebnis als Drehbuch:
quelle
git branch --sort=-committerdate | head -5
Für alle, die nur die Top 5 Filialnamen nach Committer-Datum sortieren möchten.
quelle
Die akzeptierte Befehlszeilenantwort rockt, aber wenn Sie etwas Schöneres wie eine GUI und Ihren Ursprung wollen === "github".
Sie können im Repository auf "Zweige" klicken. Oder klicken Sie direkt auf die URL: https://github.com/ORGANIZATION_NAME/REPO_NAME/branches
quelle
Hier ist die Variante, nach der ich gesucht habe:
Das
tail -r
kehrt die Liste so die zuletztcommiterdate
letzte.quelle
tail
hat-r
?Ich leite die Ausgabe der akzeptierten Antwort in weiter
dialog
, um mir eine interaktive Liste zu geben:Speichern unter (zB)
~/bin/git_recent_branches.sh
undchmod +x
es. Danngit config --global alias.rb '!git_recent_branches.sh'
, um mir einen neuengit rb
Befehl zu geben .quelle
Ich weiß, dass es bereits viele Antworten gibt, aber hier sind meine zwei Cent für einen einfachen Alias (ich möchte meinen letzten Zweig unten haben):
Dies gibt Ihnen einen schönen Überblick über Ihre letzten 15 Zweige in Farbe, wobei Ihr aktueller Zweig hervorgehoben ist (und ein Sternchen hat).
quelle
Beim Versuch, einen Alias festzulegen, gab es einige Probleme beim Umgang mit einfachen Anführungszeichen auf dem Mac in bash_profile. Diese Antwort half, es zu lösen " So entziehen Sie einfache Anführungszeichen in Zeichenfolgen in einfachen Anführungszeichen
Arbeitslösung:
PS Konnte wegen meines Rufes nicht kommentieren
quelle
git for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'
das ist was du brauchstquelle
Git v2.19 führt die
branch.sort
Konfigurationsoption ein (siehe branch.sort ).So
git branch
wird standardmäßig nach Committer-Datum (absteigend) mit sortiertSkript:
Aktualisieren:
Damit,
und
quelle