我想获得Git存储库中所有分支的列表,其中“最新”分支位于顶部,“最新的”分支是最近提交的分支(因此,更可能是我想关注的分支)。

有没有一种方法可以使用Git(a)按最新提交对分支列表进行排序,或者(b)以某种机器可读格式将分支列表与每个分支的最后提交日期一起获取?

最坏的情况是,我总是可以运行gitbranch获取所有分支的列表,解析其输出,然后运行git-log-n 1 branchname--format=format:%ci获取每个分支的提交日期。但这将在Windows环境下运行,在那里启动一个新进程相对昂贵,因此如果有很多分支,每个分支启动一次Git可执行文件可能会很慢。有没有一种方法可以用一个命令完成所有这些?


对每个ref使用git的--sort=-committendate选项;

从Git 2.7.0开始,Git分支也可用:

基本用法:

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))'

结果:

Pro用法(Unix):

您可以在~/.gitconfig中放入以下代码段。recentb别名接受两个参数:

refbranch:前面和后面的列是根据哪个分支计算的。默认主机计数:显示最近的分支。默认值20

[alias]
    # ATTENTION: All aliases prefixed with ! run in /bin/sh make sure you use sh syntax, not bash/zsh or whatever
    recentb = "!r() { refbranch=$1 count=$2; git for-each-ref --sort=-committerdate refs/heads --format='%(refname:short)|%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always --count=${count:-20} | while read line; do branch=$(echo \"$line\" | awk 'BEGIN { FS = \"|\" }; { print $1 }' | tr -d '*'); ahead=$(git rev-list --count \"${refbranch:-origin/master}..${branch}\"); behind=$(git rev-list --count \"${branch}..${refbranch:-origin/master}\"); colorline=$(echo \"$line\" | sed 's/^[^|]*|//'); echo \"$ahead|$behind|$colorline\" | awk -F'|' -vOFS='|' '{$5=substr($5,1,70)}1' ; done | ( echo \"ahead|behind||branch|lastcommit|message|author\\n\" && cat) | column -ts'|';}; r"

结果:


Git分支名称列表,按最近提交排序…

根据Jakub的回答和Joe的提示,下面将去掉“refs/heads/”,因此输出仅显示分支名称:


命令:

git for-each-ref --count=30 --sort=-committerdate refs/heads/ --format='%(refname:short)'

结果:


以下是最佳代码,它结合了其他两个答案:

git for-each-ref --sort=-committerdate refs/heads/ --format='%(committerdate:short) %(authorname) %(refname:short)'

下面是一个简单的命令,列出了具有最新提交的所有分支:

git branch -v

要按最近提交排序,请使用

git branch -v --sort=committerdate

资料来源:http://git-scm.com/book/en/Git-Branching-Branch-Management


我也有同样的问题,所以我写了一个Ruby宝石,叫做Twig。它按时间顺序列出分支(最新的第一个),还可以让您设置最大年龄,这样您就不会列出所有分支(如果您有很多分支)。例如:

$ twig

                              issue  status       todo            branch
                              -----  ------       ----            ------
2013-01-26 18:00:21 (7m ago)  486    In progress  Rebase          optimize-all-the-things
2013-01-26 16:49:21 (2h ago)  268    In progress  -               whitespace-all-the-things
2013-01-23 18:35:21 (3d ago)  159    Shipped      Test in prod  * refactor-all-the-things
2013-01-22 17:12:09 (4d ago)  -      -            -               development
2013-01-20 19:45:42 (6d ago)  -      -            -               master

它还允许您存储每个分支的自定义财产,例如票证id、状态、todos,并根据这些财产筛选分支列表。更多信息:http://rondevera.github.io/twig/


我作为脚本的最佳结果:

git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short)|%(committerdate:iso)|%(authorname)' |
    sed 's/refs\/heads\///g' |
    grep -v BACKUP  | 
    while IFS='|' read branch date author
    do 
        printf '%-15s %-30s %s\n' "$branch" "$date" "$author"
    done

这是基于saeedgnu的版本,但当前的分支显示为星形和彩色,并且只显示未描述为“月”或“年”前的任何内容:

current_branch="$(git symbolic-ref --short -q HEAD)"
git for-each-ref --sort=committerdate refs/heads \
  --format='%(refname:short)|%(committerdate:relative)' \
  | grep -v '\(year\|month\)s\? ago' \
  | while IFS='|' read branch date
    do
      start='  '
      end=''
      if [[ $branch = $current_branch ]]; then
        start='* \e[32m'
        end='\e[0m'
      fi
      printf "$start%-30s %s$end\\n" "$branch" "$date"
    done

我还需要没有任何重复的颜色、标签和远程引用:

for ref in $(git for-each-ref --sort=-committerdate --format="%(refname)" refs/heads/ refs/remotes ); do git log -n1 $ref --pretty=format:"%Cgreen%cr%Creset %C(yellow)%d%Creset %C(bold blue)<%an>%Creset%n" | cat ; done | awk '! a[$0]++'

因为引用很难,Bash的别名如下:

alias glist='for ref in $(git for-each-ref --sort=-committerdate --format="%(refname)" refs/heads/ refs/remotes ); do git log -n1 $ref --pretty=format:"%Cgreen%cr%Creset %C(yellow)%d%Creset %C(bold blue)<%an>%Creset%n" | cat ; done | awk '"'! a["'$0'"]++'"

其他答案似乎不允许传递-vv来获得详细的输出。

所以这里有一个单行程序,按照提交日期、保存颜色等对gitbranch-vv进行排序:

git branch -vv --color=always | while read; do echo -e $(git log -1 --format=%ct $(echo "_$REPLY" | awk '{print $2}' | perl -pe 's/\e\[?.*?[\@-~]//g') 2> /dev/null || git log -1 --format=%ct)"\t$REPLY"; done | sort -r | cut -f 2

如果您还想打印提交日期,可以使用以下版本:

git branch -vv --color=always | while read; do echo -e $(git log -1 --format=%ci $(echo "_$REPLY" | awk '{print $2}' | perl -pe 's/\e\[?.*?[\@-~]//g') 2> /dev/null || git log -1 --format=%ci)" $REPLY"; done | sort -r | cut -d ' ' -f -1,4-

样本输出:

2013-09-15   master                  da39a3e [origin/master: behind 7] Some patch
2013-09-11 * (detached from 3eba4b8) 3eba4b8 Some other patch
2013-09-09   my-feature              e5e6b4b [master: ahead 2, behind 25] WIP

拆分成多行可能更易读:

git branch -vv --color=always | while read; do
    # The underscore is because the active branch is preceded by a '*', and
    # for awk I need the columns to line up. The perl call is to strip out
    # ansi colors; if you don't pass --color=always above you can skip this
    local branch=$(echo "_$REPLY" | awk '{print $2}' | perl -pe 's/\e\[?.*?[\@-~]//g')
    # git log fails when you pass a detached head as a branch name.
    # Hide the error and get the date of the current head.
    local branch_modified=$(git log -1 --format=%ci "$branch" 2> /dev/null || git log -1 --format=%ci)
    echo -e "$branch_modified $REPLY"
# cut strips the time and timezone columns, leaving only the date
done | sort -r | cut -d ' ' -f -1,4-

这也应该与git分支的其他参数一起使用,例如-vvr列出远程跟踪分支,或-vva列出远程跟踪和本地分支。


添加一些颜色(因为漂亮的格式不可用)

[alias]
    branchdate = for-each-ref --sort=-committerdate refs/heads/ --format="%(authordate:short)%09%(objectname:short)%09%1B[0;33m%(refname:short)%1B[m%09"

下面是另一个脚本,它执行所有其他脚本所做的操作。实际上,它为shell提供了一个函数。

它的贡献是从Git配置中提取一些颜色(或使用默认值)。

# Git Branch by Date
# Usage: gbd [ -r ]
gbd() {
    local reset_color=`tput sgr0`
    local subject_color=`tput setaf 4 ; tput bold`
    local author_color=`tput setaf 6`

    local target=refs/heads
    local branch_color=`git config --get-color color.branch.local white`

    if [ "$1" = -r ]
    then
        target=refs/remotes/origin
        branch_color=`git config --get-color color.branch.remote red`
    fi

    git for-each-ref --sort=committerdate $target --format="${branch_color}%(refname:short)${reset_color} ${subject_color}%(subject)${reset_color} ${author_color}- %(authorname) (%(committerdate:relative))${reset_color}"
}

这是我想要的变体:

git for-each-ref --sort=-committerdate --format='%(committerdate)%09%(refname:short)' refs/heads/ | tail -r

该tail-r反转列表,因此最近的commitedate是最后一个。


我喜欢使用相对日期,并将分支名称缩短如下:

git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads

这为您提供了输出:

21 minutes ago  nathan/a_recent_branch
6 hours ago     master
27 hours ago    nathan/some_other_branch
29 hours ago    branch_c
6 days ago      branch_d

我建议制作一个Bash文件来添加所有您喜爱的别名,然后将脚本分享给您的团队。下面是一个示例,只添加以下内容:

#!/bin/sh

git config --global alias.branches "!echo ' ------------------------------------------------------------' && git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads && echo ' ------------------------------------------------------------'"

然后,您可以这样做,以获得一个格式和排序良好的本地分支列表:

git branches

更新:如果要着色,请执行以下操作:

#!/bin/sh
#
(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)$|$"

被接受的命令行回答令人震惊,但如果你想要更漂亮的东西,比如GUI,以及你的origin==“github”。

您可以单击存储库中的“分支”。或者直接点击URL:https://github.com/ORGANIZATION_NAME/REPO_NAME/branches


仅供参考,如果您想获得最近签出的分支列表(而不是最近提交的分支),可以使用Git的reflog:

$ git reflog | egrep -io "moving from ([^[:space:]]+)" | awk '{ print $3 }' | head -n5
master
stable
master
some-cool-feature
feature/improve-everything

另请参阅:如何获取最近签出的Git分支列表?


我使用以下别名:

最近=“!r(){count=$1;每个ref的git--sort=-committedate-refs/heads--format='%(HEAD)%(颜色:黄色)%(refname:short)|%(颜色∶粗体绿色)%(committedate:relative)|%

其产生:

我们还可以给出自定义计数。,

git最近20(默认值为10)。


git2.7(2015年第4季度)将引入直接使用git分支的分支排序:请参见提交aa3bc55、提交aedcb7d、提交1511b22、提交f65f139。。。(2015年9月23日),提交aedcb7d,提交1511b22,提交ca41799(2015年12月24日),并提交f65f139。。。(2015年9月23日)Karthik Nayak(Karthik纳亚克)。(2015年10月15日,Junio C Hamano(吉斯特)在提交第7f11b48页时合并)

特别是提交aedcb7d:

branch.c:使用“ref filter”API

使“branch.c”使用“ref filter”API来迭代ref排序。这将删除替换它的“branch.c”中使用的大部分代码调用“ref filter”库。

它添加了选项--sort=<key>:

根据给定的关键字排序。前缀-按值的降序排序。您可以多次使用--sort=<key>选项,在这种情况下,最后一个键将成为主键。支持的密钥与git for each-ref中的密钥相同。排序顺序默认为基于完整的refname(包括refs/…前缀)进行排序。首先列出分离的HEAD(如果存在),然后列出本地分支,最后列出远程跟踪分支。

在这里:

git branch --sort=-committerdate 

或者(见下文Git 2.19)

# if you are sure to /always/ want to see branches ordered by commits:
git config --global branch.sort -committerdate
git branch

另见Karthik Nayak(KarthikNayak)的承诺9e46833(2015年10月30日)。帮助人:Junio C Hamano(吉斯特)。(由Junio C Hamano--gitster合并,提交415095f,2015年11月3日)

当根据数值排序时(例如--sort=objectsize),当两个引用都保持相同值时,不会进行回退比较。如Johannes Sixt($gmane/280117)所指出的,这可能会导致意外结果(即,不能预先确定列出具有相等值的引用的顺序)。因此,回退到基于refname的字母比较只要其他标准相等。$git分支--sort=objectsize*(HEAD与fromtag分离)分支二分支一主人


使用Git 2.19,可以默认设置排序顺序。gitbranch支持一个configbranch.sort,就像git标记,它已经有了一个configtag.sort。参见Samuel Maftoul(“”)的承诺560ae1c(2018年8月16日)。(于2018年8月27日由Junio C Hamano--gitster在提交d89db6f中合并)

分支排序:

此变量控制由gitbranch显示的分支的排序顺序。如果不提供“--sort=<value>”选项,将使用此变量的值作为默认值。


要列出远程分支,请使用gitbranch-r--sort=objectsize。-r标志使其列出远程分支而不是本地分支。


在Git 2.27(2020年第二季度)中,“Git branch”和其他“for each ref”变体接受了多个--sort=<key>选项,其优先级递增,但在“--ignore case”处理方面存在一些漏洞,以及与refname的连接中断,这些问题已得到解决。

参见Jeff King(peff)的承诺7c5045f,承诺76f9e56(2020年5月3日)。(由Junio C Hamano--gitster合并,于2020年5月8日提交6de1630)

ref筛选器:仅在所有用户排序后应用回退refname排序签字人:Jeff King

提交9e468334b4(“ref-filter:fallback on alphabetic comparison”,2015-10-30,Git v2.7.0-rc0--第10批中列出的合并)教导ref-filter的排序回退到比较参考名。但它在错误的级别执行了这一操作,覆盖了来自用户的单个“--sort”键的比较结果,而不是在所有排序键都用完之后。这对于一个“--sort”选项是正确的,但对于多个选项则不正确。我们将打破第一个键与refname之间的任何联系,并且永远不会计算第二个键。为了让事情变得更有趣,我们有时只应用了这种回退!对于像“taggeremail”这样需要字符串比较的字段,我们确实会返回strcmp()的结果,即使它是0。但对于“taggerdate”等数字“value”字段,我们确实应用了回退。这就是为什么我们的多重排序测试忽略了这一点:它使用taggeremail作为主要比较。因此,让我们从添加一个更严格的测试开始。我们将有一组提交,表达两个标签电子邮件、日期和参考名的每一个组合。然后,我们可以确认我们的排序应用了正确的优先级,我们将同时命中字符串和值比较器。这确实显示了错误,修复方法很简单:在所有ref_sorting键都用完之后,将回退移到外部compare_refs()函数。注意,在外部函数中,我们没有“ignore_case”标志,因为它是每个单独ref_sorting元素的一部分。由于我们没有使用用户的密钥进行匹配,因此这种回退应该做什么是值得商榷的。但到目前为止,我们一直在努力尊重这面旗帜,所以最不具侵略性的事情就是继续这样做。由于当前代码中的所有调用方要么为所有键设置标志,要么为无设置标志,因此我们只能从第一个键中提取标志。在一个假设的世界中,用户真的可以分别翻转按键的不区分大小写,我们可能需要扩展代码以将这种情况与“忽略大小写”区分开来。


“git-branch--sort”(man)的实现写入了分离的HEAD显示,它一直都是破解的,git 2.31(2021第1季度)对此进行了清理。

请参阅提交4045f65、提交2708ce6、提交7c269a7、提交d094748、提交75c50e5(2021 1月7日),以及提交08bf6a8、提交ffdd02a(2021 1月6日),作者为瓦尔·阿恩弗·比亚马森(avar)。(由Junio C Hamano——gitster——于2021 1月25日提交9e409d7合并)

branch:在反向排序下首先显示“HEAD detached”签字人:Ævar ArnfjörěBjarmason

更改类似“gitbranch-l-sort=-objectsize”(man)的输出,以在输出的开头显示“(HEAD detached at<hash>)”消息。在前面的提交中添加compare_dedetached_head()函数之前,我们会将此输出作为紧急效果发出。为了进行排序,考虑“(HEAD detached at<hash>)”消息的对象大小、类型或其他非属性没有任何意义。让我们总是在顶部发射。首先对其进行排序的唯一原因是,我们将其注入到ref过滤器机制中,因此内置/branch.c不需要进行自己的“我分离了吗?”检测。


在Git 2.35(2022年第1季度)中,类似于“Git-c branch.sort=伪分支new HEAD”(man),即。不需要排序键信息的“gitbranch”(man)命令的操作模式不再因看到伪排序键而出错。

参见Junio C Hamano(gitster)的commit 98e7ab6,commit 1a89796(2021 10月20日)。(由Junio C Hamano——gitster——于2021 11月29日提交5126145合并)

对于每个ref:延迟解析--sort=<atom>选项

for-each ref命令系列在看到每个--sort=<atom>选项时立即调用解析器,当<atom>未被识别时,甚至在命令行上看到其他选项之前就终止。相反,将它们累积在字符串列表中,并在命令行解析完成后将它们解析为ref_sorting结构。因此,“gitbranch-sort=fake-h”(man)过去无法提供简短的帮助,这可能是一个特性,现在可以了,这与其他选项的工作方式更加一致。


我通过管道将接受的答案输出到对话框中,给我一个交互式列表:

#!/bin/bash

TMP_FILE=/tmp/selected-git-branch

eval `resize`
dialog --title "Recent Git Branches" --menu "Choose a branch" $LINES $COLUMNS $(( $LINES - 8 )) $(git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short) %(committerdate:short)') 2> $TMP_FILE

if [ $? -eq 0 ]
then
    git checkout $(< $TMP_FILE)
fi

rm -f $TMP_FILE

clear

另存为(例如)~/bin/git_recent_branches.sh和chmod+x it。然后git-config--globalalias.rb'!git_recent_branches.sh',给我一个新的git-rb命令。


下面是我用来在最近的分支之间切换的一个小脚本:

#!/bin/bash
# sudo bash

re='^[0-9]+$'

if [[ "$1" =~ $re ]]; then
    lines="$1"
else
    lines=10
fi
branches="$(git recent | tail -n $lines | nl)"
branches_nf="$(git recent-nf | tail -n $lines | nl)"
echo "$branches"

# Prompt which server to connect to
max="$(echo "$branches" | wc -l)"
index=
while [[ ! ( "$index" =~ ^[0-9]+$ && "$index" -gt 0 && "$index" -le "$max" ) ]]; do
    echo -n "Checkout to: "
    read index
done

branch="$( echo "$branches_nf" | sed -n "${index}p" | awk '{ print $NF }' )"
git co $branch
clear

使用这两个别名:

recent = for-each-ref --sort=committerdate refs/heads/ --format=' %(color:blue) %(authorname) %(color:yellow)%(refname:short)%(color:reset)'
recent-nf = for-each-ref --sort=committerdate refs/heads/ --format=' %(authorname) %(refname:short)'

只需在Git存储库中调用它,它将显示最后N个分支(默认为10个)和每个分支旁边的数字。输入分支机构的编号,它将签出:


我能够参考前面的例子来创建最适合我的东西。

git for each ref--sort=-提交日期refs/heads--format='%(authordate:短)%(颜色:红色)%(对象名称:短)%(%(颜色:绿色)%(提交日期:相对)%(颜色重置))'

正如下面评论中所建议的,您还可以包括远程分支和作者的姓名。

git for each ref--sort=-committedate refs/heads refs/remotes--format='%(authordate:短)%(颜色:红色)%(对象名称:短)%(%(颜色:绿色)%(提交日期:相对)%(颜色重置))%(作者姓名)'

下面是作为shell别名的两个命令,您可以轻松地将它们添加到shell概要文件中。

# show a list of local git branches sorted by the commit date
alias git.branches='git for-each-ref --sort=-committerdate refs/heads --format="%(authordate:short) %(color:red)%(objectname:short) %(color:yellow)%(refname:short)%(color:reset) (%(color:green)%(committerdate:relative)%(color:reset))"'

# show a list of local and remote git branches sorted by the commit date
alias git.branches.remote='git for-each-ref --sort=-committerdate refs/heads refs/remotes --format="%(authordate:short) %(color:red)%(objectname:short) %(color:yellow)%(refname:short)%(color:reset) (%(color:green)%(committerdate:relative)%(color:reset)) %(authorname)"'

我想出了以下命令(适用于Git2.13和更高版本):

git branch -r --sort=creatordate \
    --format "%(creatordate:relative);%(committername);%(refname:lstrip=-1)" \
    | grep -v ";HEAD$" \
    | column -s ";" -t

如果没有列,可以将最后一行替换为

    | sed -e "s/;/\t/g"

输出看起来像

6 years ago             Tom Preston-Werner  book
4 years, 4 months ago   Parker Moore        0.12.1-release
4 years ago             Matt Rogers         1.0-branch
3 years, 11 months ago  Matt Rogers         1.2_branch
3 years, 1 month ago    Parker Moore        v1-stable
12 months ago           Ben Balter          pages-as-documents
10 months ago           Jordon Bedwell      make-jekyll-parallel
6 months ago            Pat Hawks           to_integer
5 months ago            Parker Moore        3.4-stable-backport-5920
4 months ago            Parker Moore        yajl-ruby-2-4-patch
4 weeks ago             Parker Moore        3.4-stable
3 weeks ago             Parker Moore        rouge-1-and-2
19 hours ago            jekyllbot           master

我写了一篇博客文章,讲述了各种部件的工作原理。


git for each ref--sort=committedate-refs/heads/--format='%(HEAD)%(颜色:黄色)%(refname:short)%(color:reset)-%(颜色:红色)%(objectname:short)%


从Git 2.19开始,您可以简单地:

git branch --sort=-committerdate

您还可以:

git config branch.sort -committerdate

因此,无论何时在当前存储库中列出分支,都将按提交日期排序。

如果每当列出分支时,都希望它们按comitterdeate排序:

git config --global branch.sort -committerdate

免责声明:我是Git中这个功能的作者,当我看到这个问题时,我实现了它。


Gitv2.19引入了branch.sort配置选项(参见branch.sor)。

因此git分支将默认按提交日期(降序)排序

# gitconfig
[branch]
    sort = -committerdate     # Descending

脚本:

git config --global branch.sort -committerdate

So,

git branch

输出:

* dev
  master
  _

And

git branch -v

输出:

* dev    0afecf5 Merge branch 'oc' into dev
  master 652428a Merge branch 'dev'
  _      7159cf9 Merge branch 'bashrc' into dev

根据提交人日期,只获取排名前五的分支名称:

gitbranch--sort=-committerdate|head-5


我知道已经有很多答案了,但下面是我的两分钱,作为一个简单的别名(我喜欢在底部显示我最近的分支):

[alias]
        br = !git branch --sort=committerdate --color=always | tail -n15
[color "branch"]
        current = yellow
        local = cyan
        remote = red

这将为您提供最新15个分支的漂亮概览,颜色为,突出显示当前分支(并带有星号)。


通常我们最近会考虑远程分支。所以试试这个

git fetch
git for-each-ref --sort=-committerdate refs/remotes/origin

最简单的一个与最后提交日期一起打印:

git branch --all  --format='%(committerdate:short) %(refname:short)'|sort

另一种变化:

git branch -r --sort=-committerdate --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always | column -ts'|'

值得注意的是,尽管它正在查看远程分支中的更改,但在运行命令之前还是值得与origin同步(您可以使用Git fetch),因为我发现如果您的本地Git文件夹有一段时间没有更新,它可能会返回过期信息。

此外,这是一个在Windows cmd和PowerShell中工作的版本:

git branch -r --sort=-committerdate --format="%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)" --color=always

git for-each-ref --sort=-committerdate refs/heads/

# Or using Git branch (since version 2.7.0)
git branch --sort=-committerdate  # Descending
git branch --sort=committerdate  # Ascending

我发现以下命令对我的目的很有用。

git branch --sort=-committerdate | head -n 10

这将列出最新的10个分支。它很短,也可以在没有别名的情况下使用。