计算Git分支上的提交数量

aar*_*man 154 git

我已经找到了这个答案:git中分支上的提交数量, 但假设分支是从master创建的.

如何在依赖于该假设的情况下计算分支中的提交数量?

在SVN中,这是微不足道的,但由于某种原因,很难在git中找到答案.

Pet*_*oes 293

要计算您所在分支的提交:

git rev-list --count HEAD
Run Code Online (Sandbox Code Playgroud)

对于一个分支

git rev-list --count <branch-name>
Run Code Online (Sandbox Code Playgroud)

如果要计算自创建分支以来创建的分支上的提交

git rev-list --count HEAD ^<branch-name>
Run Code Online (Sandbox Code Playgroud)

这将计算所有不在分支名称上的提交.

例子

git checkout master
git checkout -b test
<We do 3 commits>
git rev-list --count HEAD ^master
Run Code Online (Sandbox Code Playgroud)

结果:3

如果你的分支来自一个叫做的分支develop:

git checkout develop
git checkout -b test
<We do 3 commits>
git rev-list --count HEAD ^develop
Run Code Online (Sandbox Code Playgroud)

结果:3

忽略合并

如果您将另一个分支合并到当前分支而没有快进,并且您执行上述操作,则还会计算合并.这是因为对于git来说,merge是一个提交.

如果您不想计算这些提交,请添加--no-merges:

git rev-list --no-merges --count HEAD ^develop
Run Code Online (Sandbox Code Playgroud)

  • 这些都没有显示正确的数字,例如master和branchname显示相同数量的提交. (6认同)
  • @wilmoore 你的意思是合并一个分支后你会得到一个额外的计数?这在技术上是一个提交,所以它被计算在内。但如果您不想计算这些提交,请添加 --no-merges。我会更新答案。 (2认同)
  • git 1.7中不存在rev-list --count标志.现在,使用`git log`下面的downvoted-to-hell建议比任何其他建议都更好. (2认同)

Asn*_*tta 53

这条线

git rev-list --count HEAD
Run Code Online (Sandbox Code Playgroud)

将生成这样的输出

git shortlog -s -n
Run Code Online (Sandbox Code Playgroud)

  • @Ciastopiekarz这些是每个人提交的数量. (5认同)
  • 这些数字在名字前是什么?你可以解释吗 ? (3认同)

sca*_*nny 34

它可能需要一个相对较新版本的Git,但这对我很有用:

git rev-list --count develop..HEAD
Run Code Online (Sandbox Code Playgroud)

这给了我一个基于master的当前分支的确切提交数.

彼得的答案中的命令git rev-list --count HEAD ^develop包括更多的提交,在我当前的项目中为678和97.

我的提交历史在这个分支上是线性的,所以YMMV,但它给了我想要的确切答案,即"到目前为止我在这个特征分支上添加了多少次提交?".


Rem*_*ear 5

怎么样 git log --pretty=oneline | wc -l

从当前分支的角度来看,这应该计算所有提交。


kyb*_*kyb 5

自历史记录开始以来对当前分支进行的提交次数,不计算合并分支的提交次数:

git rev-list HEAD --count --first-parent
Run Code Online (Sandbox Code Playgroud)

从文档git rev-list --help

--first-parent

看到合并提交后,仅遵循第一个父提交。当查看特定主题分支的演变时,此选项可以提供更好的概述,因为合并到主题分支中的趋势往往只是不时调整以适应更新的上游,并且该选项使您可以忽略引入到其中的单个提交。通过这样的合并您的历史记录。不能与--bisect结合使用。

其他提交以来完成的提交数量:

git rev-list HEAD abc0923f --count --first-parent
Run Code Online (Sandbox Code Playgroud)

或相同:

git rev-list abc0923f.. --count --first-parent
Run Code Online (Sandbox Code Playgroud)

或使用其他git参考

git rev-list master tag-v20 --count --first-parent
Run Code Online (Sandbox Code Playgroud)

注意:浅克隆将缩小历史记录大小。例如,如果您使用克隆--depth 1,则返回1。


计算自2018年以来完成的提交

git rev-list HEAD --count --first-parent --since=2018-01-01
Run Code Online (Sandbox Code Playgroud)

2018年1月1日,2018年1月1日,2018年1月1日也有效。


git rev-label

我编写了一个脚本,以从Git获取版本修订的格式'$refname-c$count-g$short$_dirty',该格式扩展为master-c137-gabd32ef
脚本本身包含帮助。

安装

cd ~/bin
wget 'https://gitlab.com/kyb/build-info-header/raw/master/git-revision.sh?inline=false' -qO git-revision.sh  &&  chmod +x git-revision.sh
ln -s $PWD/git-revision.sh /usr/local/bin/git-revision
Run Code Online (Sandbox Code Playgroud)

用法

git revision
git revision '$refname-c$count-g$short$_dirty'
Run Code Online (Sandbox Code Playgroud)