协慌网

登录 贡献 社区

如何获得最近提交的 Git 分支列表?

我想得到一个 Git 存储库中所有分支的列表,顶部有 “最新鲜” 的分支,其中 “最新鲜” 的分支是最近提交的分支(因此,更可能是一个分支)我想要注意)。

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

最糟糕的情况是,我总是可以运行git branch来获取所有分支的列表,解析它的输出,然后git log -n 1 branchname --format=format:%ci为每个分支,以获得每个分支的提交日期。但这将在 Windows 机器上运行,其中启动一个新进程相对昂贵,因此如果有很多分支,每个分支启动 Git 可执行文件可能会变慢。有没有办法用一个命令完成所有这些?

答案

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

结果:

结果

git 分支名称列表,按最近提交的顺序排序...

扩展 Jakub 的答案和 Joe 的提示,以下将删除 “refs / heads /”,因此输出只显示分支名称:


命令:

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

结果:

最近的git分支

这是最佳代码,它结合了另外两个答案:

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