我已经找到了这个答案: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)
Asn*_*tta 53
这条线
git rev-list --count HEAD
Run Code Online (Sandbox Code Playgroud)
将生成这样的输出
git shortlog -s -n
Run Code Online (Sandbox Code Playgroud)
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,但它给了我想要的确切答案,即"到目前为止我在这个特征分支上添加了多少次提交?".
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。
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)