关于github:主和分支之间的git提前/后退信息?

git ahead/behind info between master and branch?

我创建了一个分支来测试我的本地repo(test-branch),我把它推到Github上。

如果我转到我的Github帐户并选择这个test-branch,它将显示以下信息:

1
This branch is 1 commit ahead and 2 commits behind master

我的问题是:

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

    1
    git diff master..test-branch

    或者使用Meld(我更喜欢):

    1
    git difftool master..test-branch

    但是我想知道是否有一种方法可以分别看到前面和后面的承诺。例如:有没有一种方法可以证明1个先承诺自己,然后2个先承诺自己?


  • 下面是我比较两个分支并显示每个分支领先于另一个分支的提交数的一个技巧(关于问题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分支在其远程对应分支之前/之后有多少提交。


    首先,要想了解您在本地落后了多少次修改,您应该执行一个git fetch,以确保从远程获得最新的信息。

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

    1
    2
    3
    4
    5
    6
    $ 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

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

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

    为了区分master的"前修订",我可以从origin/master中排除"后修订"。

    1
    git diff master..origin/master^

    为了区分origin/master的"后修订",我可以将master中的"前修订"排除在外:

    1
    git diff origin/master..master^^

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

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

    更新

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

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

    1
    git branch --track test-branch

    从1.7版开始,语法不同:

    1
    git branch --set-upstream test-branch


    对于Git2.5+,您现在有了另一个选项来查看配置为推送到分支的所有分支的前面/后面。

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

    在"查看未提交的git提交"中查看更多信息


    在执行git获取之后,可以运行git status来显示本地分支在远程版本分支之前或之后提交了多少提交。

    不过,这不会显示在不同分支前面或后面有多少提交。您的选项是完整的diff,查看github,或者在所有repo上使用类似于vimhsa链接的解决方案:git状态