我已经在我的本地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个后提交?


当前回答

第1部分

为了回答你的问题1,这里有一个我发现的比较两个分支并显示每个分支比另一个分支多提交多少的技巧(对你的问题1的更一般的回答):

本地分支机构: Git revlist -left-right -count master - test-branch

对于远程分支: Git rev-list -left-right -count origin/master

输出如下所示:

2 1

这个输出意味着:“与master相比,test-branch提前1次提交,向后2次提交。”

你也可以比较本地分支和远程分支,例如origin/master…Master来找出一个本地分支(这里是Master)领先/落后于远程分支的提交数。

第2部分

要回答你问题的第二部分,解决方案取决于你到底想要实现什么。

查看提交

为了让git rev-list返回两边唯一的提交列表,将——count参数替换为类似于——pretty=oneline的参数,使完整的命令执行:

git rev-list --left-right --pretty=oneline master...test-branch

这将产生如下输出:

<bba27b56ad7072e281d529d4845e4edf877eb7d7 unique commit 2 on master
<dad0b69ec50ea57b076bfecabf2cc7c8a652bb6f unique commit 1 on master
>4bfad52fbcf0e60d78d06661d5c06b59c98ac8fd unique commit 1 on test-branch

在这里,每个提交sha之前都有<或>来表示它可以在哪个分支上找到(左边或右边,分别是master或test-branch)。

查看代码

如果你想查看只在两个分支上发现的所有新提交的差异,你需要分两步完成:

定义最近的公共祖先

$ git merge-base master test-branch
c22faff7468d6d5caef217ac6b82f3ed95e9d902

将任何一个分支与上面获得的commit sha区别对待(通常是短格式)

显示仅在master上找到的所有提交的差异

git diff c22faff7..master

以显示仅找到test-branch的所有提交的差异

git diff c22faff7..test-branch

其他回答

第1部分

为了回答你的问题1,这里有一个我发现的比较两个分支并显示每个分支比另一个分支多提交多少的技巧(对你的问题1的更一般的回答):

本地分支机构: Git revlist -left-right -count master - test-branch

对于远程分支: Git rev-list -left-right -count origin/master

输出如下所示:

2 1

这个输出意味着:“与master相比,test-branch提前1次提交,向后2次提交。”

你也可以比较本地分支和远程分支,例如origin/master…Master来找出一个本地分支(这里是Master)领先/落后于远程分支的提交数。

第2部分

要回答你问题的第二部分,解决方案取决于你到底想要实现什么。

查看提交

为了让git rev-list返回两边唯一的提交列表,将——count参数替换为类似于——pretty=oneline的参数,使完整的命令执行:

git rev-list --left-right --pretty=oneline master...test-branch

这将产生如下输出:

<bba27b56ad7072e281d529d4845e4edf877eb7d7 unique commit 2 on master
<dad0b69ec50ea57b076bfecabf2cc7c8a652bb6f unique commit 1 on master
>4bfad52fbcf0e60d78d06661d5c06b59c98ac8fd unique commit 1 on test-branch

在这里,每个提交sha之前都有<或>来表示它可以在哪个分支上找到(左边或右边,分别是master或test-branch)。

查看代码

如果你想查看只在两个分支上发现的所有新提交的差异,你需要分两步完成:

定义最近的公共祖先

$ git merge-base master test-branch
c22faff7468d6d5caef217ac6b82f3ed95e9d902

将任何一个分支与上面获得的commit sha区别对待(通常是短格式)

显示仅在master上找到的所有提交的差异

git diff c22faff7..master

以显示仅找到test-branch的所有提交的差异

git diff c22faff7..test-branch

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

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

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

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

但是,这不会显示它在不同分支的前面或后面提交了多少次。你的选择是完全不同的,看github,或使用像Vimhsa上面链接的解决方案: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)