获取自上一个标记以来的所有git commit


126

当我要标记一个提交时,我需要知道自上次标记的提交以来发生了什么变化。例如:

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 ''

Answers:


222

git log <yourlasttag>..HEAD

如果您希望像示例中那样使用它们,请在一行上输入commit id + message,然后

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以便它可以打印出之间的所有标签。


有什么办法可以跳过合并提交吗?
Holloway 2015年

@Trengot不知道,没有调查过。不管怎样,IMO合并提交都是要避免的事情,我尽可能地使用重定基。
eis 2015年

Linux版本也适用于Windows Bash的Git
kwesolowski

应该不是<yourlasttag>+1吗?
拉菲·哈查杜杜安

@RaffiKhatchadourian如果这样做的话,您会错过commit <yourlasttag>+ 1中所做的更改,而之后您只会得到更改
eis 2017年

39

如果您当前的提交也是一个标记,并且您想动态获取自上一个标记以来的更改,而又不知道最新标记或先前标记名称,则可以执行以下操作:

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

请注意,这@是的缩写HEAD


很好!如果只希望将提交文本更改--oneline更改为--pretty = format:“%s”:git log --pretty = format:“%s” $(git describe --tags --abbrev = 0 @ ^).. @
JBarbosa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.