Jeg ønsker at få en liste over alle filialer i et Git-repositorium med de "friskeste" filialer øverst, hvor "friskeste" filialen er den, der er blevet commitet til for nylig (og derfor er mere sandsynligt, at det er den, jeg ønsker at være opmærksom på).
Er der en måde, hvorpå jeg kan bruge Git til enten (a) at sortere listen over grene efter seneste commit eller (b) få en liste over grene sammen med hver enkelt af dem's sidste-commit-dato, i en slags maskinlæsbart format?
I værste fald kunne jeg altid køre git branch
for at få en liste over alle grene, analysere dens output og derefter git log -n 1 branchname --format=format:%ci
for hver enkelt gren for at få hver enkelt gren for at få dens commit-dato. Men dette vil køre på en Windows-boks, hvor det er relativt dyrt at starte en ny proces, så det kan blive langsomt at starte den eksekverbare Git-fil én gang pr. gren, hvis der er mange grene. Er der en måde at gøre alt dette med en enkelt kommando?
Brug indstillingen --sort=-committerdate
i [git for-each-ref
][git-for-each-ref];
Også tilgængelig siden Git 2.7.0 for git branch
:
git for-each-ref --sort=-committerdate refs/heads/
# Or using git branch (since version 2.7.0)
git branch --sort=-committerdate # DESC
git branch --sort=committerdate # ASC
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))'
Opdatering af Jakubs svar og Joes tip, følgende vil fjerne "refs/heads/" så output kun viser grennavnene:
git for-each-ref --count=30 --sort=-committerdate refs/heads/ --format='%(refname:short)'
[]]3