在一个github项目中,你可以去一个/ branches页面和一个漂亮的图形,每个分支显示每个分支落后多远,以及每个分支相对于主分支的距离。
是否有一个类似的命令行工具?什么东西适用于遥控器?例如,
git branch -v -v
接近我正在寻找的东西,但仅适用于本地分支机构。
答案 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:track
比push:track
更准确,具体取决于default push policy)
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,{{3} },commit 17938f1,commit 3ba308c,commit a798410,commit b180e6f,commit 01f9582,commit 7743fcc,commit ffd921d,commit 99c6a71, commit d4919bb,commit 42d0eb0,commit 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
”,并且在与其他任何内容一起使用时都会出错。