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

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

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


当前回答

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

#!/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个)和每个分支旁边的数字。输入分支机构的编号,它将签出:

其他回答

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

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

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

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

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

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


命令:

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

结果:

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

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

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

我使用以下别名:

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

其产生:

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

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