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

时间:2011-10-14 21:48:51

标签: git

在一个github项目中,你可以去一个/ branches页面和一个漂亮的图形,每个分支显示每个分支落后多远,以及每个分支相对于主分支的距离。

git branch ahead behind

是否有一个类似的命令行工具?什么东西适用于遥控器?例如,

git branch -v -v

接近我正在寻找的东西,但仅适用于本地分支机构。

2 个答案:

答案 0 :(得分:58)

我一直对此感到好奇,所以我发了一个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

答案 1 :(得分:35)

2015年更新

我在下面的初步答案并不理想,因为上游分支不一定是您要推送的分支。它只是你要从的分支。

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

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

点击“Viewing Unpushed Git Commits”了解更多信息。

(正如void.pointer the comments所指出,upstream:trackpush:track更准确,具体取决于default push policy


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

请参阅commit 3d9e4cecommit 949af06commit 56b4360commit 6eac70fcommit 1a34728commit 1a0ca5ecommit 3a42980,{{3} },commit 17938f1commit 3ba308ccommit a798410commit b180e6fcommit 01f9582commit 7743fcccommit ffd921dcommit 99c6a71commit d4919bbcommit 42d0eb0commit 4f3e3b3(2017年1月10日)commit c58fc85

Karthik Nayak (KarthikNayak)于2017年2月27日Junio C Hamano -- gitster --合并)

push:
  

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

     

如果附加了lstrip=<N>rstrip=<N>),则从参考号的正面(背面)剥离<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年第一季度)将提供另一种方式 请参阅commit 93e8cd8中的commit b28061c

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

  

介绍:

     
      
  • %(upstream:track)显示“[ahead M, behind N]”和
  •   
  • %(upstream:trackshort)适当地显示“=”,“>”,“<”或“<>”(受{{3}启发})。
  •   
     

现在您可以在for-each-ref中使用以下格式:

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

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

     

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