如何找出master中有多少提交不在我的分支中?

时间:2016-07-22 12:37:48

标签: git github version-control merge rebase

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

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

  1. select to_tsvector('simple', replace('pro-physik.de', '.', ' ')) @@ to_tsquery('simple', replace('pro-physik:*', '.', ' ')) 合并到我的分支master,并推送feature_branch
  2. 将我的分支feature_branch重新定位到主分区,并强行推送feature_branch
  3. 鉴于相关团队目前正在使用1.(合并工作流程),我该如何看待:

    1. 远程feature_branch分支中的提交次数,但远程master中没有。
    2. 如果1中的数字> 0,则为真值,否则为false。
    3. 最好有一些与GitHub集成的东西,但我也想知道如何从命令行执行此操作。

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

2 个答案:

答案 0 :(得分:3)

Jeff Puckett II's answer很好,您也应该关注他的link to this other answer。但是你想要的实际上是直接建立在Git上的:

git rev-list --count master..feature

git rev-list --count 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

事实上,这只是git statusgit branch -vv所做的事情,尽管他们也会首先检查零提交。

这是一个简短的(非常简短,对我而言:-))解释。

Git' logrev-list几乎是同一个命令

git loggit rev-list都会查看整个提交范围。最重要的区别是git log向您显示日志消息(以及可选的补丁),而git rev-list默认显示原始提交哈希值。

但是,您可以git rev-list计数提供它将列出的提交数量,而不是原始哈希ID。而且,正如您将在that other answer上的漂亮图表中看到的那样,stop..start双点语法( git diff 之外)非常特别的 1 )告诉Git"给我所有你可以找到的提交,从start开始,排除你可以找到的所有提交从{ {1}}"

如果您找到stop上的所有提交,然后删除两个分支上的所有提交,那么您只剩下<的提交< em>仅<{1}}上的。然后,您feature 计算。这些是您提前和#34;的提交,因此您将走多远。

(让feature记录它们,每个记录在一行上,然后让git rev-list计算行数,当然也可以。)

使用git log反转这两个名称,让Git查找wc上的提交,然后在两个分支上删除提交。这些就是你&#34;背后的&#34;。

feature..master的输出对人类很少有用,主要用于脚本。事实上,这正是我上面提到的:一个双线脚本(或者甚至只有一行,但是在我的屏幕上并不适合这里)。

以下是一个值得思考的问题:我们如何知道使用名称mastergit rev-list?我们怎么能指示 Git 知道这个?但是,让我们暂时离开。

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

这意味着无论您在使用master...feature diff时学到了什么,在处理其他Git命令时都必须忘记它。 Sic transit gloria Git。

答案 1 :(得分:1)

而不是diff

git diff master..feature

使用log

git log master..feature

请参阅this answer以获得更好的解释。

因此,如果您只想要计数,请使用--oneline并将其传输到字数行。

git log --oneline master..feature | wc -l