别名,显示在master之前/之后有多少提交分支

时间:2013-10-03 15:59:50

标签: git

新的Bitbucket Branches页面非常棒。它显示了每个分支在master之前/之后的提交次数。是否有显示相同信息的Git别名?

信息应显示:

  • 分行名称
  • 最后更新时
  • 有多少人提交其背后的主人
  • 提前几次提交主人

http://i.imgur.com/VsOH4cr.png

3 个答案:

答案 0 :(得分:2)

看看我在回答一个稍微不同的问题时发布的脚本:https://stackoverflow.com/a/18760795/683080

您需要确保自己与git fetchgit fetch --all保持同步。一旦你,你可以用它来显示分支的前方或后方。 Git不存储此信息的缓存版本,因此如果您的分支远远落后(比如Linux内核当前提示的6,000次提交),那么计算可能需要一些时间。否则,它很快。

一个小注意事项:脚本没有显示上次更新的日期,但它确实显示了其余部分。

答案 1 :(得分:1)

如果你设置了主人'作为上游跟踪分支:

git branch --set-upstream-to master

然后执行git branch -vv,应该看看您的主题分支提前/退出多少次提交。至于分支最后一次更新,我不认为Git会存储这些信息。

答案 2 :(得分:1)

我使用一个小的perl脚本,只使用'git log branch1..branch2'命令来计算branch2中有多少提交,但branch1中没有,反之亦然。它针对指定的基础为每个分支运行此命令。

我将它直接安装在git-core文件夹中,作为名为git-brstatus的文件。它显示:

> git brstatus master
Behind    Branch                        Ahead
3         dev                           2

这是分支图:

┌─[HEAD]──[master]──6
├ 5
├ 4
│ ┌─[dev]──3
│ ├ 2
├─┘
└ 1

扩展它应该很容易收集每个分支的最后一个提交日期。这是来源。


#!/usr/bin/perl

if($#ARGV != 0) {
    die "\nUsage: git-brstatus \n";
}

my $base = $ARGV[0];
my @branches = split(/\n/, `git branch`);
printf "%-10s%-30s%-10s\n", 'Behind', 'Branch', 'Ahead';
foreach my $branch (@branches) {
    $branch =~ s/\s//g;
    $branch =~ s/\*//g;
    next if $branch eq $base;
    my @ahead_commits = split(/\n/, `git log --oneline $base..$branch`);
    my @behind_commits = split(/\n/, `git log --oneline $branch..$base`);
    printf "%-10d%-30s%-10d\n", ($#behind_commits+1), $branch, ($#ahead_commits+1);
}