如何使用自标记以来的提交次数来显示git commit

Joe*_*oel 20 git

有了git describe你可以得到提交的数目自上次标签.如果您只有标记和提交数量,那么显示所描述的提交的最佳方式是什么?

我知道你可以使用git log tag..它并将它管道到一个执行计数的脚本但是我希望有一个类似的更优雅的解决方案git show tag~n.

要添加更多上下文,我们计划使用git describe创建版本号,例如使用

$ git describe
v1.5-39-g5ede964
Run Code Online (Sandbox Code Playgroud)

我们会用foo_1.5.39.我们想要做的是知道1.5.39意味着在v1.5标签之后的第39次提交,找到提交,即找到g5ede964.正如评论中所指出的,v1.5之后的第39次提交可能并不是唯一的.所以也许更好的方式来问这个是什么是找到所有提交X的最佳方式,如果HEAD指向X git describe将返回 v1.5-39-*****.

小智 27

尝试

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

要么

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

他们的意思是一样的.


Jus*_*hms 10

如果您要查找自上一个标记以来的提交数量,以下内容对我有用

git rev-list  `git rev-list --tags --no-walk --max-count=1`..HEAD --count
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`git rev-list --tags --no-walk --max-count=1` 将找到最新的标签,但该标签不一定是 HEAD 的祖先。它可能来自一个单独的分支。 (2认同)

fge*_*fge 5

你可以:

git log --oneline tag.. | wc -l
Run Code Online (Sandbox Code Playgroud)

这会给你提交的数量

  • @UrsReupke:“log”是一个陶瓷命令,其输出格式可能会随着 git 的未来版本而改变(例如,随着新的 i18n 努力)。`rev-list` 保证在不同的 git 版本之间保持输出兼容。当然,围绕“log”编写脚本通常更容易:对于快速的一次性或个人脚本,这可能没问题。 (6认同)
  • 不要使用 `git log` 来编写脚本,而是使用 `git rev-list` (3认同)
  • 但我想要自标签以来的第 n 次提交,而不是自标签以来的提交次数。基本上是 git 描述的逆过程。 (2认同)

Lil*_*ard 5

在一般情况下,你所要求的是不可能的.如果您的历史记录中有任何合并,则单独提交的数量无法告诉您任何内容.

例如,给定以下repo结构:

a - b - c - d - h
  \           /
    e - f - g
Run Code Online (Sandbox Code Playgroud)

放置标签后a,除了SHA1之外,输出git describe d和输出git describe g相同:

> git describe d
tag-3-ge8dca33
> git describe g
tag-3-g4fecc2e
Run Code Online (Sandbox Code Playgroud)

也就是说,如果你没有同时进行一堆并行分支,那么你可以将一个给定的提交号码解析回一个提交,但是如果你在一个提交时甚至有一个活动的分支.你的标签然后这可能不起作用.

如果您需要可靠的版本号,则应该坚持使用显式标签.