Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.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 我怎样才能知道master中有多少提交不在我的分支中?_Git_Github_Version Control_Merge_Rebase - Fatal编程技术网

Git 我怎样才能知道master中有多少提交不在我的分支中?

Git 我怎样才能知道master中有多少提交不在我的分支中?,git,github,version-control,merge,rebase,Git,Github,Version Control,Merge,Rebase,我们正在使用GitHub来存储我们的代码存储库,我们希望所有开发人员在进行本地开发人员测试和合并之前,确保分支与master是最新的 有两种方法可以使用master的提交更新分支: 将master合并到我的分支feature\u分支,然后按feature\u分支 将我的分支feature\u分支重设到master上,并强制推送feature\u分支 考虑到相关团队目前正在使用1。(合并工作流),如何查看: 在远程主分支中,但不在远程功能分支中的提交次数 如果1中的数字大于0,则为真值,否则为假

我们正在使用GitHub来存储我们的代码存储库,我们希望所有开发人员在进行本地开发人员测试和合并之前,确保分支与master是最新的

有两种方法可以使用master的提交更新分支:

  • master
    合并到我的分支
    feature\u分支
    ,然后按
    feature\u分支
  • 将我的分支
    feature\u分支
    重设到master上,并强制推送
    feature\u分支
  • 考虑到相关团队目前正在使用1。(合并工作流),如何查看:

  • 在远程
    分支中,但不在远程
    功能分支中的提交次数
  • 如果1中的数字大于0,则为真值,否则为假 最好是让与GitHub集成的东西来实现这一点,但我也想知道如何从命令行实现这一点


    我知道我可以做一个
    git diff master..feature_branch
    ,但这实际上给了我所有的变化(并且是针对本地分支的)。我只想知道前后提交的数量,与本地
    master
    和远程
    master
    而不是
    diff
    之间显示的方式相同

    git diff master..feature
    
    使用
    log

    git log master..feature
    
    请参阅以获得一个很好的解释

    所以,如果您只需要计数,那么使用
    --oneline
    并将其传输到单词计数行

    git log --oneline master..feature | wc -l
    
    很好,你也应该跟着他。但实际上,您想要的是直接内置在Git中的:

    git rev-list --count master..feature
    
    以及:

    您可能希望将其组合成非常短的别名或脚本:

    echo feature is $(git rev-list --count master..feature) commits ahead of master
    echo and $(git rev-list --count feature..master) commits behind master
    
    事实上,这正是
    git status
    git branch-vv
    所做的,尽管它们也先检查前面或后面的零提交

    这里有一个简短的(非常简短,对我来说:-)解释

    Git的
    log
    revlist
    几乎是同一个命令
    git-log
    git-rev-list
    都可以查看整个提交范围。最重要的区别是,
    git log
    显示日志消息(以及可选的补丁),而默认情况下,
    git rev list
    只显示原始提交哈希

    但是,您可以获取
    git rev list
    来计算它将列出多少次提交,而不是它们的原始散列ID。而且,正如您将在上的漂亮图表中看到的那样,
    stop..start
    双点语法(除了在
    git diff
    中非常特殊的1)告诉git“给我从
    start
    开始可以找到的所有提交,不包括从
    stop
    开始可以找到的所有提交”

    如果找到了
    功能上的所有提交,然后去掉两个分支上的所有提交,那么只剩下
    功能上的提交。然后你就有了
    git版本列表
    。这些是你“领先”的承诺,这就是你领先的程度

    (让
    git-log
    将它们分别记录在一行中,然后让
    wc
    来计算行数,当然也很有效。)

    使用
    feature..master
    反转这两个名称,Git将查找
    master
    上的提交,然后删除两个分支上的提交。这些是你“落后”的

    git rev list
    的输出很少对人类有用,主要用于脚本中。事实上,这正是我在上面建议的:一个两行脚本(或者甚至只有一行,但这在我的屏幕上不太合适)

    这里有一个值得思考的问题:我们如何知道如何使用名称
    master
    feature
    ?我们怎么能让Git知道这一点?但我们以后再说吧


    1这里的问题是,
    git diff
    非常希望最多使用两次提交。带有两个和三个点的范围符号,
    master..feature
    master..feature
    ,通常会生成一个很长的提交列表。Git的
    diff
    无论如何都无法处理这些问题。它可以拒绝使用这些符号,这本来是相当合理的,但实际上,Git的作者决定重新使用这些符号来表示相关的东西


    这意味着,无论您学习了如何将
    master..feature
    git diff
    一起使用,在处理其他git命令时都必须将其全部忘记。但是这给了我一大堆关于他们的细节。我只想看到
    1个提前提交,2个在主机后提交
    git分支-v可以显示类似
    1个提前提交
    或git分支的信息-vv@John这就是输出,所以使用单线和管道对线计数“强制推进”是在自找麻烦。是的,可以,但也有利弊,一个优点是更干净的历史,但这个问题并不是要讨论重新基础与合并工作流。在我看来,强制推送一个人正在处理的功能分支并不是一个真正的问题。这里有一个小的输入错误
    echo和$(git rev list--count master..feature)提交到master后面
    echo feature is $(git rev-list --count master..feature) commits ahead of master
    echo and $(git rev-list --count feature..master) commits behind master