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

kor*_*ina 51 git

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

git分支领先

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

git branch -v -v
Run Code Online (Sandbox Code Playgroud)

接近我正在寻找的,但只适用于本地分支机构.

Jeh*_*iah 63

我一直对此感到好奇,所以我只是掀起了一个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
Run Code Online (Sandbox Code Playgroud)

用法:

$ git branch-status
dns_check (ahead 1) | (behind 112) origin/master
master (ahead 2) | (behind 0) origin/master
Run Code Online (Sandbox Code Playgroud)

  • 太棒了,谢谢Jehiah!这个脚本很棒.不是我想要的,所以我修改了它:[git-branches-vs-origin-master](https://gist.github.com/1288703) (3认同)
  • 当然,我现在有2个版本:https://github.com/kortina/bakpak/blob/master/bin/git-branches-vs-origin-master和https://github.com/kortina/bakpak/blob/主/斌/ git-current-branch-is-behind-origin-master.sh (2认同)
  • 感谢`git branch-status`*Jehiah*,我创建了[my own](https://gist.github.com/Mark-Booth/5058384#file-git-branch-status)(基于[lth2h's] ](https://gist.github.com/lth2h/4177524#file-git-branch-status))仅显示当前分支,仅在分支前进或后退时生成输出.它还添加了显示所有分支的选项,即使分支不在前面或后面也显示输出并显示帮助.当你的应用程序遍布多个`git`repos并且你很快就想看到所有需要关注的状态时,这非常有用. (2认同)

Von*_*onC 41

2015年更新

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

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

git for-each-ref --format="%(refname:short) %(upstream:track)" refs/heads
Run Code Online (Sandbox Code Playgroud)

在" 查看未发布的Git提交 "中查看更多内容.

(如所指出的void.pointer意见,upstream:track是不是更精确push:track,这取决于默认推送策略)


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

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

push:
Run Code Online (Sandbox Code Playgroud)

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

如果lstrip=<N>(rstrip=<N>)将被附加,条<N>斜线分隔径分量从refname的前(后)
(例如%(refname:lstrip=2)变成refs/tags/foofoo%(refname:rstrip=2)转动refs/tags/foorefs).

如果<N>是一个负数,从指定的端部带一样多路径成分作为必要离开-<N>路径组件
(例如%(refname:lstrip=-2)变成 refs/tags/footags/foo%(refname:rstrip=-1)导通refs/tags/foorefs)


原始答案(2014)

Git 1.9/2/0(2014年第一季度)将提供另一种方式.
提交b28061cRamkumar拉玛昌德拉(artagnon) :

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

介绍:

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

%(refname:short) %(upstream:trackshort)
Run Code Online (Sandbox Code Playgroud)

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

需要注意的是:track,并:trackshort只以"工作upstream",并与其他任何使用时报错了.