我已经在我的本地repo (test-branch)中创建了一个用于测试的分支,我将其推送到Github。

如果我去我的Github账户,选择这个测试分支,它会显示信息:

This branch is 1 commit ahead and 2 commits behind master

我的问题是:

我如何在本地显示这些信息(即:在终端上显示此命令,而不是必须打开Github才能看到它)? 我知道我可以看到分支之间的区别使用: Git diff master..test-branch 或者使用Meld(我更喜欢): Git difftool master..test-branch 但我想知道是否有一种方法可以分别看到前提交和后提交。也就是说:有没有一种方法可以显示1个先提交,然后2个后提交?


当前回答

在Git 2.5+中,你现在有了另一个选项,可以查看所有被配置为推送到某个分支的分支的前面/后面。

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

详见“查看未推送Git提交”

其他回答

在获取git之后,你可以运行git status来显示本地分支领先或落后于远程分支的提交数。

但是,这不会显示它在不同分支的前面或后面提交了多少次。你的选择是完全不同的,看github,或使用像Vimhsa上面链接的解决方案:Git状态所有的回购

首先,为了查看你在本地落后了多少个修订,你应该进行git获取,以确保你从远程获得了最新的信息。

git状态的默认输出会告诉你你已经完成了多少个修订,但通常我觉得这太啰嗦了:

$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 2 and 1 different commit each, respectively.
#
nothing to commit (working directory clean)

我更喜欢git状态

$ git status -sb
## master...origin/master [ahead 2, behind 1]

事实上,我将其别名为git s,这是我用于检查状态的主要命令。

为了看到master的“前修订”中的差异,我可以从origin/master中排除“后修订”:

git diff master..origin/master^

为了查看origin/master的“后面修订”的差异,我可以从master中排除“前面修订”:

git diff origin/master..master^^

如果前面或后面有5个修订,可能会更容易这样写:

git diff master..origin/master~5
git diff origin/master..master~5

更新

要查看前面/后面的修订,必须将分支配置为跟踪另一个分支。对我来说,这是我克隆远程存储库时的默认行为,当我用git推送一个分支后,push -u remotename branchname。我的版本是1.8.4.3,但从我记事起,它就一直是这样工作的。

从1.8版本开始,你可以像这样设置跟踪分支:

git branch --track test-branch

从1.7版开始,语法就不同了:

git branch --set-upstream test-branch

在Git 2.5+中,你现在有了另一个选项,可以查看所有被配置为推送到某个分支的分支的前面/后面。

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

详见“查看未推送Git提交”

你也可以使用awk让它看起来更漂亮:

git rev-list --left-right --count  origin/develop...feature-branch | awk '{print "Behind "$1" - Ahead "$2""}'

您甚至可以创建一个别名,总是先获取原点,然后比较分支

commit-diff = !"git fetch &> /dev/null && git rev-list --left-right --count"

你可以使用下面的命令来获取当前特性分支的提交数:

git rev-list --left-right --count master...$(git branch --show-current)