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

在github项目上,你可以进入一个/分支页面,像这样一个漂亮的图表,每个分支显示多less落后,每个分支在主控方面有多远。

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}位置的本地ref名称。
尊重:short:lstrip:rstrip :track ,和:trackshort选项作为upstream
如果没有configuration@{push} ref,则生成一个空string。

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

如果<N>是负数,则从指定的末端剥离所需的path组件,以留下-<N>path组件
(例如%(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 ”一起使用,在与其他任何东西一起使用时会出错。

对于这种types的问题,你可以使用“Gitk”

 sudo apt-get update sudo apt-get install gitk 

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