git在master和branch之间提前/后面的信息?

时间:2013-12-06 21:26:55

标签: git github

我已经在我的本地仓库(test-branch)中创建了一个分支进行测试,我将其推送到Github

如果我转到我的Github帐户并选择此test-branch,则会显示相关信息:

This branch is 1 commit ahead and 2 commits behind master

我的问题是:

  1. 如何在本地显示此信息(即:在终端上显示此信息的命令,而不是必须打开Github才能看到它)?
  2. 我知道我可以看到分支之间的差异:

    git diff master..test-branch
    

    或使用Meld(我更喜欢):

    git difftool master..test-branch
    

    但我想知道是否有办法分别看到提前背后提交。 I.E。:有没有办法显示 1提前提交然后那些 2提交自己?

6 个答案:

答案 0 :(得分:222)

这是我发现比较两个分支的技巧,并显示每个分支在另一个分支之前的提交数量(对于您的问题1的更一般的答案):

对于本地分支: git rev-list --left-right --count master...test-branch

对于远程分支: git rev-list --left-right --count origin/master...origin/test-branch

这给出了如下输出:

1 7

此输出表示:“与master相比,test-branch提前7次提交,1次提交。”

您还可以将本地分支与远程分支进行比较,例如origin/master...master找出本地master分支在其远程对等方面前后的提交次数。

答案 1 :(得分:32)

首先要看看你在当地有多少修改,你应该git fetch确保你拥有遥控器的最新信息。

git status的默认输出会告诉您前面或后面有多少个修订版,但通常我觉得这个版本太冗长了:

$ 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 status -sb

$ 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

答案 2 :(得分:8)

使用Git 2.5+,您现在可以使用另一个选项来查看配置为推送到分支的所有分支的前/后。

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

点击“Viewing Unpushed Git Commits

了解详情

答案 3 :(得分:1)

执行git fetch之后,您可以运行git status来显示本地分支在分支的远程版本之前或之后的提交次数。

但这并不会显示它在不同分支之前或之后的提交次数。您的选择是完整的差异,查看github,或使用上面链接的Vimhsa解决方案:Git status over all repo's

答案 4 :(得分:0)

您还可以使用if productId.contains(product.productIdentifier) { } 使其更漂亮:

awk

您甚至可以创建一个别名,该别名始终先获取原始数据,然后再比较分支

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

答案 5 :(得分:0)

要获取当前功能分支在 master 之前的提交次数,您可以使用以下命令:

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