Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
主机和分支之间的git前进/后退信息?_Git_Github - Fatal编程技术网

主机和分支之间的git前进/后退信息?

主机和分支之间的git前进/后退信息?,git,github,Git,Github,我在本地repo(testbranch)中创建了一个用于测试的分支,并将其推送到了Github 如果我转到我的Github帐户并选择此测试分支,它将显示以下信息: This branch is 1 commit ahead and 2 commits behind master 我的问题是: 如何在本地显示此信息(即:在终端上显示此信息的命令,而不必打开Github查看) 我知道我可以使用以下工具查看分支之间的差异: git diff master..test-branch 或者使用Meld

我在本地repo(
testbranch
)中创建了一个用于测试的分支,并将其推送到了
Github

如果我转到我的
Github
帐户并选择此
测试分支
,它将显示以下信息:

This branch is 1 commit ahead and 2 commits behind master
我的问题是:

  • 如何在本地显示此信息(即:在终端上显示此信息的命令,而不必打开
    Github
    查看)
  • 我知道我可以使用以下工具查看分支之间的差异:

    git diff master..test-branch
    
    或者使用
    Meld
    (我更喜欢):

    但我想知道是否有一种方法可以分别看到前面和后面的承诺。也就是说:有没有一种方法可以表明,1个人先做出承诺,然后这2个人再做出承诺


  • 在执行git获取之后,可以运行git status来显示本地分支在远程版本的分支之前或之后的提交数量


    不过,这不会显示在不同分支之前或之后有多少次提交。您可以选择完全不同,查看github,或者使用类似上面链接的Vimhsa的解决方案:

    首先,要查看您在本地落后了多少修订,您应该执行
    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状态-sb:

    $ git status -sb
    ## master...origin/master [ahead 2, behind 1]
    
    事实上,我将其别名为gits,这是我用于检查状态的主要命令

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

    git diff master..origin/master^
    
    git diff origin/master..master^^
    
    要查看
    origin/master
    的“后修订版”中的差异,我可以从
    master
    中排除“前修订版”:

    git diff master..origin/master^
    
    git diff origin/master..master^^
    
    如果前面或后面有5个修订版,那么这样写可能更容易:

    git diff master..origin/master~5
    git diff origin/master..master~5
    
    git branch --track test-branch
    
    <bba27b56ad7072e281d529d4845e4edf877eb7d7 unique commit 2 on master
    <dad0b69ec50ea57b076bfecabf2cc7c8a652bb6f unique commit 1 on master
    >4bfad52fbcf0e60d78d06661d5c06b59c98ac8fd unique commit 1 on test-branch
    
    更新

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

    从版本1.8开始,您可以如下设置跟踪分支:

    git diff master..origin/master~5
    git diff origin/master..master~5
    
    git branch --track test-branch
    
    <bba27b56ad7072e281d529d4845e4edf877eb7d7 unique commit 2 on master
    <dad0b69ec50ea57b076bfecabf2cc7c8a652bb6f unique commit 1 on master
    >4bfad52fbcf0e60d78d06661d5c06b59c98ac8fd unique commit 1 on test-branch
    
    从1.7版开始,语法有所不同:

    git branch --set-upstream test-branch
    
    第一部分 作为对问题1的回答,我发现了一个技巧,可以比较两个分支,并显示每个分支的提交数领先于另一个分支(这是对问题1的更一般的回答):

    对于本地分支机构:
    git版本列表--左-右--计数主机…测试分支

    对于远程分支:
    git版本列表--从左到右--计数原点/主…原点/测试分支

    这将产生如下输出:

    21

    这个输出意味着:“与
    master
    相比,
    testbranch
    提前提交1次,延迟提交2次。”

    您还可以将本地分支与远程分支进行比较,例如,
    origin/master…master
    ,以了解本地分支(此处
    master
    )在其远程对应分支之前/之后的提交数量

    第二部分 要回答问题的第二部分,解决方案取决于您想要实现的目标

    查看提交内容

    为了让
    git rev list
    返回两侧唯一的提交的确切列表,请将
    --count
    参数替换为类似
    --pretty=oneline
    的内容,以执行完整的命令:

    git rev list--left-right--pretty=oneline master…测试分支
    
    这将生成如下输出:

    git diff master..origin/master~5
    git diff origin/master..master~5
    
    git branch --track test-branch
    
    <bba27b56ad7072e281d529d4845e4edf877eb7d7 unique commit 2 on master
    <dad0b69ec50ea57b076bfecabf2cc7c8a652bb6f unique commit 1 on master
    >4bfad52fbcf0e60d78d06661d5c06b59c98ac8fd unique commit 1 on test-branch
    
  • 将任一分支与上面获得的提交sha区分开来(通常可以使用短格式)
  • 显示仅在主服务器上找到的所有提交的差异

    git diff c22faff7..master
    
    显示仅找到的所有提交的差异测试分支

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

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

    更多信息请参见“”

    您还可以使用
    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版本列表--从左到右--计数主机…$(git分支--显示当前数据)

    git 2.5+(2015年第2季度)将为每个参考引入
    git--format=“%(推送:跟踪)”参考/磁头
    。请看,因为我无法使用我将要编写的关键字找到这个问题,所以我只想注意,这相当于在构成这些分支的提交集之间进行比较(然后计算元素)。希望这能成为搜索引擎索引。非常有用!为了帮助您通过搜索引擎找到这一点,我将添加一个两个数字都是复数的示例:
    此分支前面有164个提交,后面有85个提交。
    您使用的是什么版本的
    git
    ?我无法重现使用
    git status
    git status-sb
    获得的结果。如果我尝试任何一个命令(在执行
    git fetch
    之后),我都不会得到任何关于前/后提交的信息。您查看前/后提交的方式应用于
    master
    origin/master
    ,我想查看
    master
    和另一个分支
    测试分支的差异。你能重新格式化你的答案来解决这个问题吗?只有当我在分支名称之间使用3个点(不是2个点)时,“后面”和“前面”版本中的差异才对我有效。在这里,^和^^似乎并不重要,例如:git diff master…origin/master git diff origin/master…master总之,“git status-sb”非常有用。这是一个gre