如何获取一个按照最近提交排序的Git分支列表?
如何获取一个按照最近提交排序的Git分支列表?
我想获取一个Git仓库中的所有分支列表,其中“最新的”分支排在最前面,所谓的“最新的”分支是指最近提交的分支(因此,更可能是我想要关注的分支之一)。
有没有一种使用Git的方法来(a)按最新提交来排序分支列表,或者(b)以某种可机读格式获取分支列表,以及每一个分支的最后提交日期?
最坏的情况下,我可以始终运行git branch
来获取所有分支的列表,解析其输出,然后为每一个分支运行
git log -n 1 branchname --format=format:%ci
,以获取每个分支的提交日期。但这将在一个Windows框架上运行,其中启动一个新进程相对较昂贵,因此如果有很多分支,则每个分支启动Git可执行文件可能会变慢。是否有一种方法可以用单个命令完成所有这些操作?
admin 更改状态以发布 2023年5月23日
使用git for-each-ref
的--sort=-committerdate
选项;
自Git 2.7.0开始,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))'
结果:
专业用法(Unix):
你可以将下面的代码片段放入~/.gitconfig
文件中。recentb别名接受两个参数:
refbranch
:计算进度栏的分支名称。默认值为mastercount
:显示最近的分支数量。默认值为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"