Git changelog:如何获取所有更改到特定标签?

问题描述:

有没有一种简单的方法或命令来获取所有git提交到特定标签以生成项目的自动更新日志?我总是用v0.1.0等版本号标记我的git回购站,并且例如要将所有提交标记为v0.1.0Git changelog:如何获取所有更改到特定标签?

我已经通过文档看了,但似乎并没有为它找到一个有用的选项或命令:http://git-scm.com/docs/git-log(是下来的方式目前)

例如:

$ git log --oneline --decorate 

显示提交旁边的标签。我想要一样的,但只限于特定的标签。

+1

与您的兴趣相关:Pimp My Changelog,这是一个Ruby脚本。 https://github.com/pcreux/pimpmychangelog – olleolleolle

分支机构你可以这样做:

git log --oneline --decorate v0.1.0 

...显示每个提交到并包括v0.1.0。当然,git log允许,您还可以限制任何的那git rev-list理解的方式显示的提交,所以如果你只是想看看v0.0.9之间的变化和v0.1.0你也可以这样做:

git log --oneline --decorate v0.0.9..v0.1.0 

替代输出可能对此有用的是git shortlog,它对每个作者的贡献进行分组和总结。试一下,比如:

git shortlog v0.1.0 
+0

感谢您的精心解答:)这正是我想要的。 – Luwe

+2

要显示特定标记后的提交,您可以使用'git log --oneline --decorate v0.1.0..' –

+0

如何在运行git命令后复制日志,即git log --oneline --decorate? –

只需追加tagname你的指挥,你应该罚款:)我喜欢--graph切换到可视化导致了标签:)

只需使用标签名,提交符:git log --oneline --decorate v0.1.0

对于由标签创建的changelog,我用这个脚本:

#!/bin/bash 
# Author:Andrey Nikishaev 
echo "CHANGELOG" 
echo ---------------------- 
git tag -l | sort -u -r | while read TAG ; do 
    echo 
    if [ $NEXT ];then 
     echo [$NEXT] 
    else 
     echo "[Current]" 
    fi 
    GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT 
    NEXT=$TAG 
done 
FIRST=$(git tag -l | head -1) 
echo 
echo [$FIRST] 
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST 
+0

如果您的标签是xyz表单上的版本,请将'-V'标志添加到'sort'以正确地对1.0版本进行排序.9,1.0.10等 –

到脚本更新由Creotiv建议,以便更好地分选标签

#!/bin/bash 
# Author:Andrey Nikishaev, Gunnar Lindholm 
echo "CHANGELOG" 
echo ---------------------- 
git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags |tac |grep -v '^$' | while read TAG ; do 
    echo 
    if [ $NEXT ];then 
     echo [$NEXT] 
    else 
     echo "[Current]" 
    fi 
    GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT 
    NEXT=$TAG 
done 
FIRST=$(git tag -l | head -1) 
echo 
echo [$FIRST] 
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST 

有一个非常有用的宝石,t他输出写入在降价,加入问题上的支持,并通过分割标签

https://github.com/kebab-project/katip

犯我想出了原剧本的这种修改。这会正确处理版本标记。

#!/bin/bash 
# Author:Andrey Nikishaev 
echo "CHANGELOG" 
echo ---------------------- 
git tag -l --sort=v:refname | tac | while read TAG ; do 
    echo 
    if [ $NEXT ];then 
     echo [$NEXT] 
    else 
     echo "[Current]" 
    fi 
    GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT 
    NEXT=$TAG 
done 
FIRST=$(git tag -l --sort=v:refname | head -1) 
echo 
echo [$FIRST] 
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST