我想获取 Git 存储库中所有分支的列表,顶部是“最新”分支,其中“最新”分支是最近提交的分支(因此,更有可能是一个我要注意)。
有没有一种方法可以使用 Git (a) 按最新提交对分支列表进行排序,或者 (b) 以某种机器可读的格式获取分支列表以及每个分支的最后提交日期?
最坏的情况是,我总是可以运行git branch以获取所有分支的列表,解析其输出,然后git log -n 1 branchname --format=format:%ci为每个分支获取每个分支的提交日期。但这将在 Windows 机器上运行,其中启动一个新进程相对昂贵,因此如果有很多分支,每个分支启动一次 Git 可执行文件可能会变慢。有没有办法用一个命令来完成这一切?
git branch
git log -n 1 branchname --format=format:%ci
使用--sort=-committerdate选项git for-each-ref;
--sort=-committerdate
git for-each-ref
自 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))'
您可以将以下代码段放入您的~/.gitconfig. 最近的别名接受两个参数:
~/.gitconfig
refbranch
count
[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"