如何获取一个按照最近提交排序的Git分支列表?

9 浏览
0 Comments

如何获取一个按照最近提交排序的Git分支列表?

我想获取一个Git仓库中的所有分支列表,其中“最新的”分支排在最前面,所谓的“最新的”分支是指最近提交的分支(因此,更可能是我想要关注的分支之一)。

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

最坏的情况下,我可以始终运行git branch来获取所有分支的列表,解析其输出,然后为每一个分支运行git log -n 1 branchname --format=format:%ci,以获取每个分支的提交日期。但这将在一个Windows框架上运行,其中启动一个新进程相对较昂贵,因此如果有很多分支,则每个分支启动Git可执行文件可能会变慢。是否有一种方法可以用单个命令完成所有这些操作?

admin 更改状态以发布 2023年5月23日
0
0 Comments

按最近提交的顺序列出 Git 分支名称的列表...

Jakub的回答Joe的提示基础上,以下操作将剥离出“refs/heads/”,从而仅显示分支名称的输出内容:


命令:

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


结果:

最近的 Git 分支

0
0 Comments

使用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

结果:

Result

高级用法:

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

结果:

Result

专业用法(Unix):

你可以将下面的代码片段放入~/.gitconfig文件中。recentb别名接受两个参数:

  • refbranch:计算进度栏的分支名称。默认值为master
  • count:显示最近的分支数量。默认值为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"

结果:

Recentb alias result

0