标签之间的Git日志

107

我想要输出两个标记提交之间的日志。

mbell@cheetah [12:07:22] [/var/www/html/brone] [dev]
-> % git tag 
6.x-0.1
6.x-1.0-beta1
6.x-1.0-beta2
6.x-1.0-beta3
6.x-1.0-beta4
6.x-1.0-beta5
6.x-1.0-beta6
6.x-1.0-beta7
6.x-1.0-beta8
6.x-1.0-beta9
如果我执行以下命令: git log 6.x-1.0-beta8 6.x-1.0-beta9 > ~/gitlogbrone.txt 它会输出自仓库开始以来的所有提交记录,这不是我想要的。我已经阅读了git log手册,但并没有太大帮助。
6个回答

183

您需要使用省略号来表示范围。尝试使用 git log tag1..tag2


26
将会给你对称差集 (只显示不在两个标签之间的提交),我猜你想要使用 .. - knittl
21
注意:标签应按升序排列。newtag..oldtag无效。 - balki
4
回复:“标签应该按升序排列,newtag..oldtag不起作用”:我认为Git首先将标签转换为它们各自的提交,然后对这些提交执行所请求的操作。更改标签顺序只是颠倒了先前和后续的差异,但仍应有效。 - Gino
如果标签是第一个呢? - Thomas Decaux
创建标签。运行变更日志创建。删除标签。提交变更日志。创建标签。 - Riccardo79
注意:git log tag1..tag2 给出的是从 tag1 之后的更改,不包括 tag1 的更改。 - frmbelz

21

针对那些希望生成发行说明文件并需要一个易于阅读且易于修改的脚本的人,对@Yurii和@wilmol的答案进行了扩展。

export VERSION=$(git tag --sort=-committerdate | head -1)
export PREVIOUS_VERSION=$(git tag --sort=-committerdate | head -2 | awk '{split($0, tags, "\n")} END {print tags[1]}')
export CHANGES=$(git log --pretty="- %s" $VERSION...$PREVIOUS_VERSION)
printf "#  Release notes (\`$VERSION\`)\n\n## Changes\n$CHANGES\n\n## Metadata\n\`\`\`\nThis version -------- $VERSION\nPrevious version ---- $PREVIOUS_VERSION\nTotal commits ------- $(echo "$CHANGES" | wc -l)\n\`\`\`\n" > release_notes.md

上述脚本将在release_notes.md生成一个类似于以下内容的Markdown文件:


发布说明 (14.2)

更改内容

  • ABCDEFGHIJKLMNOP
  • ABCDEFGHIJKLMNOP
  • ABCDEFGHIJKLMNOP
  • ABCDEFGHIJKLMNOP
  • ABCDEFGHIJKLMNOP

元数据

This version -------- 14.2
Previous version ---- 14.1
Total commits ------- 5

我喜欢这种方法的几个原因:

  • 如果在我感兴趣的两个标签之间有一个标签,则可以在运行最后两行之前手动设置$VERSION$PREVIOUS_VERSION

  • 经过一些调整,我可以对$CHANGES进行排序、过滤和修改,以满足我特定的需求。


11
我用这个来获取最后2个标签之间的提交记录:
git log --pretty=format:%s `git tag --sort=-committerdate | head -1`...`git tag --sort=-committerdate | head -2 | awk '{split($0, tags, "\n")} END {print tags[1]}'` > change_log.txt

8

感谢@Noufal Ibrahim的回答。

我正在提交文件并创建新标签。 但在此之前,我的需求是列出并格式化上一个标签创建后的所有提交记录。 这是我那时所做的:

$ git log <last_tag>..

注意结尾的双点(..)。

2
一个来自@wilmol的优化解决方案。
git log --pretty=oneline `git tag --sort=-committerdate | head -1`...`git tag --sort=-committerdate | head -2 | tail -1`

我更喜欢在脚本中使用以下代码来发布说明:

git log --pretty=oneline `git tag --sort=-committerdate | head -1`...`git tag --sort=-committerdate | head -2 | tail -1` |cut -d " " -f 2- |grep -v "Merge pull request"

这个命令可以清晰地显示两个最近标签之间的提交历史,而不包括git has和合并行。


0
我正在使用以下快捷方式:

git log $(git tag |tail -1)..


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接