获取自上次标记以来的所有 git 提交

当我要给提交添加标签时,我需要知道自从上次添加标签的提交之后发生了什么变化。例如:

a87a6sdf87a6d4 Some new feature
a87a6sdf87a6d3 Some bug fix
a87a6sdf87a6d2 Some comments added
a87a6sdf87a6d1 Some merge <- v1.4.0

在这个例子中,我想知道关于3个最新的提交,或者能够像上面那样打印一个日志,显示两个提交它们的标记(如果有的话)。当我看到添加了一个新特性时,我会将其标记为 v1.5.0。

你是怎么处理这件事的?我应该这样使用标签吗?我应该在标签消息中写什么?我总是把它留空: git tag -a v1.2.3 -m ''

78623 次浏览

git log <yourlasttag>..HEAD

如果您希望它们像您的示例中一样,在一行中使用提交 id + 消息,那么

git log <yourlasttag>..HEAD --oneline

如果你不知道你最新的标签或者你想让它是动态的,你可以在 Windows 上做

for /f "delims=" %a in ('git describe --tags --abbrev^=0') do @set latesttag=%a
git log %latesttag%..HEAD --oneline

以及 linux/git bash/windows bash

git log $(git describe --tags --abbrev=0)..HEAD --oneline

此外,如果您知道历史中的一个标记,并且想要打印从该标记到当前情况的所有内容,那么您可能还需要添加 --decorate,以便它能够打印出中间的所有标记。

如果您当前的提交也是一个标记,并且您希望动态地获取自前一个标记以来的更改,而不知道最新的标记或前一个标记名称,那么您可以这样做:

git log --oneline $(git describe --tags --abbrev=0 @^)..@

请注意,@HEAD的缩写。

您可以很容易地忽略使用 sed 进行合并提交

git log $(git describe --tags --abbrev=0)..@ --oneline | sed '/Merge/d'