如何获取特定分支的提交次数?

How to get the count of number of commits of a specific branch?

我想知道是否有办法计算在特定分支上完成的提交数。

我试过使用 rev-list,但得到的计数不同。

PS C:\Dev\code\TestProj> git checkout master
Already on 'master'                            
Your branch is up to date with 'origin/master'.
PS C:\Dev\code\TestProj> git checkout -B "TESTBRANCH"
Switched to a new branch 'TESTBRANCH'
PS C:\Dev\code\TestProj> git commit -a -m "TESTBRANCH-TEST COMMIT"
[TESTBRANCH 3a98967] TESTBRANCH-TEST COMMIT
 1 file changed, 1 insertion(+)            
PS C:\Dev\code\TestProj> git rev-list --count --first-parent TESTBRANCH
9
PS C:\Dev\code\TestProj> 

在上面的代码中,我只在我创建的新分支上进行了一次提交,我可以看到返回的计数是 9。我认为 Git 也在考虑其他一些修改。

有没有办法让提交计数仅为 1?

您的 rev-list 将一直走到第一个提交。如果TESTBRANCH是从main分支出来的,你可以试试:

git log --oneline TESTBRANCH ^main

在这种情况下,您需要使用从 master 到 TESTBRANCH 的提交范围。这将计算在 TESTBRANCH 上进行的所有提交,因为它与 master 不同:

git rev-list --count --first-parent master..TESTBRANCH

这个问题的答案应该是 1。

如果稍后拉取,并且 master 上有新的提交,您还可以计算自创建 TESTBRANCH 以来的提交次数,只需翻转范围内参数的顺序即可:

git rev-list --count --first-parent TESTBRANCH..master

<branch A>..<branch B> 的这种语法称为提交范围。有关更深入的解释,请参阅 this article on commit ranges,,尽管简短的摘要是:

<branch A>..<branch B> 指的是分支 B 上不在分支 A 上的所有提交。因此 master..TESTBRANCH 表示“TESTBRANCH 上的所有提交,不在主分支上”。