显示所有分支的git前进和后退信息,包括遥控器

在github项目中,你可以进入一个/分支页面,选择一个像这样的漂亮的图表,每个分支表示每个分支相对于主控器的落后程度和多远。

git分支在后面

有没有一种类似的命令行工具? 与遥控器配合使用的东西? 例如,

git branch -v -v

接近我所寻找的,但只适用于本地分行。


我也很好奇,所以我只是鞭打了一个git branch-status脚本,它使用git for-each-ref提供了这些信息

#!/bin/bash
# by http://github.com/jehiah
# this prints out some branch status (similar to the '... ahead' info you get from git status)

# example:
# $ git branch-status
# dns_check (ahead 1) | (behind 112) origin/master
# master (ahead 2) | (behind 0) origin/master

git for-each-ref --format="%(refname:short) %(upstream:short)" refs/heads | 
while read local remote
do
    [ -z "$remote" ] && continue
    git rev-list --left-right ${local}...${remote} -- 2>/dev/null >/tmp/git_upstream_status_delta || continue
    LEFT_AHEAD=$(grep -c '^<' /tmp/git_upstream_status_delta)
    RIGHT_AHEAD=$(grep -c '^>' /tmp/git_upstream_status_delta)
    echo "$local (ahead $LEFT_AHEAD) | (behind $RIGHT_AHEAD) $remote"
done

用法:

$ git branch-status
dns_check (ahead 1) | (behind 112) origin/master
master (ahead 2) | (behind 0) origin/master

2015年更新

我下面的初步答案并不理想,因为上游分支不一定是您要推荐的分支。 这只是你从中拉出的分支。

使用Git 2.5+,正确的命令是:

git for-each-ref --format="%(refname:short) %(upstream:track)" refs/heads

请参阅“查看未压缩Git提交”。

(正如注释中的void.pointer所指出的, upstream:trackpush:track更精确,这取决于默认的推送策略)


Git 2.13(2017年第二季度)使用更通用的ref-filter API和更完整的git for-each-ref push

参见提交3d9e4ce,提交949af06,提交56b4360,提交6eac70f,提交1a34728,提交1a0ca5e,提交3a42980,提交17938f1,提交3ba308c,提交a798410,提交b180e6f,提交01f9582,提交7743fcc,提交ffd921d,提交99c6a71,提交d4919bb,提交42d0eb0,提交4f3e3b3,提交c58fc85(2017年1月10日)作者:Karthik Nayak( KarthikNayak )。
(由Junio C gitster合并 - gitster - 承诺93e8cd8,2017年2月27日)

push:

代表所显示参考文献的@{push}位置的本地参考文献的名称。
尊重:short:lstrip:rstrip:track:trackshort选项与upstream一样。
如果未配置@{push} ref,则生成一个空字符串。

如果添加了lstrip=<N>rstrip=<N> ),则从refname的前面(后面)剥离<N>斜线分隔的路径组件
(比如%(refname:lstrip=2)refs/tags/foo变成foo%(refname:rstrip=2)refs/tags/foo变成refs )。

如果<N>是负数,则从指定的末端除去必要的路径组件,以留下-<N>路径组件
(例如%(refname:lstrip=-2)refs/tags/foo转换为tags/foo%(refname:rstrip=-1)refs/tags/foo转换为refs


原始答案(2014)

Git 1.9 / 2/0(2014年第1季度)将提供另一种方法。
参见Ramkumar Ramachandra(artagnon)的提交b28061c:

for-each-ref :介绍%(upstream:track[short])

介绍:

  • %(upstream:track)显示“ [ahead M, behind N] ”和
  • %(upstream:trackshort)显示“ = ”,“ > ”,“ < ”或“ <> ”(受contrib/completion/git-prompt.sh )。
  • 现在,您可以在for-each-ref中使用以下格式:

    %(refname:short) %(upstream:trackshort)
    

    用简洁的跟踪信息显示参考。

    请注意:track:trackshort只能与“ upstream ”一起使用,并且在与其他任何内容一起使用时出错。


    对于这类问题,您可以使用“Gitk”`

    sudo apt-get update
    sudo apt-get install gitk
    

    这可以帮助你很多。你甚至可以看到所有分支的git

    链接地址: http://www.djcxy.com/p/31753.html

    上一篇: Show git ahead and behind info for all branches, including remotes

    下一篇: Git: how to identify what changed?