标签之间的Git日志

dig*_*tal 75 git

我正在尝试在两个标记的提交之间输出日志.

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
Run Code Online (Sandbox Code Playgroud)

如果我那么做:

git log 6.x-1.0-beta8 6.x-1.0-beta9 > ~/gitlogbrone.txt

它会自回购开始以来输出所有提交,这不是我想要的.我已经阅读了git log手册,但它并没有多大帮助.

Nou*_*him 133

您需要省略号来指示范围.试试git log tag1..tag2.

  • `...`会给你对称差异(只显示两个标签的提交_not_),我想你想要`..` (24认同)
  • 注意:标签应按升序排列.`newtag..oldtag`不起作用 (13认同)
  • Re:"标签应该按升序排列.newtag..oldtag不起作用":我认为git只是先将标签转换为各自的提交,然后对这些提交执行请求的操作.切换标签的顺序只会反转前后差异,但仍应有效. (3认同)

Mat*_*lda 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
Run Code Online (Sandbox Code Playgroud)

上面的脚本生成一个 markdown 文件,release_notes.md如下所示:


发行说明 (14.2

变化

  • ABCDEFGHIJKLMNOP
  • ABCDEFGHIJKLMNOP
  • ABCDEFGHIJKLMNOP
  • ABCDEFGHIJKLMNOP
  • ABCDEFGHIJKLMNOP

元数据

This version -------- 14.2
Previous version ---- 14.1
Total commits ------- 5
Run Code Online (Sandbox Code Playgroud)

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

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

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


Shu*_*rma 8

感谢@Noufal Ibrahim的回答。

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

$ git log <last_tag>..
Run Code Online (Sandbox Code Playgroud)

..注意末尾的双点 ( )


wil*_*mol 6

我用它来获取最后 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
Run Code Online (Sandbox Code Playgroud)