当我们计划下一个版本时,我们通过查看上一版本中未包含的提交来构建发行说明。通常我们使用gitk和训练有素的眼睛来检测这样的提交。但是现在,由于提交和分支的数量在增加,因此看到它们变得越来越难。
是否有一个命令可以打印HEAD下的所有提交但不打印特定的标签?为了更清楚,我在简化的例子中添加了这个。
F <- develop | HEAD
| \
D E
| |
last_release_tag -> B C
|/
A
预期输出为:C E D F(订单并不重要。)
提前致谢。
答案 0 :(得分:2)
您正在寻找的是一系列提交,包括HEAD之前的所有提交,但不包括最后一个版本标记。您可以使用:
git log last_release_tag..HEAD
相当于:
git log ^last_release_tag HEAD
有关详细信息,请参阅gitrevisions(7)中的“指定范围”。在第二种形式中,如果您需要排除多个标记,则可以使用多个^last_release_tag
(例如,如果版本C也已发布,则可能需要这样做。)
您可能还需要调查--oneline
或--pretty
格式等选项来自定义输出,具体取决于您希望发布说明的外观。更多细节可以在git-log(1)中的“PRETTY FORMATS”下找到。
答案 1 :(得分:1)
gitk只是标准Git工具之上的图形层。在您的示例中,
git log last_release_tag..F
会列出有关您想要的提交的信息。该命令应解释为“F可以访问的提交,除了last_release_tag指向的提交可以访问的提交”。如果默认输出格式不符合您的需要,有许多格式选项,请参阅git-log(1)。有关如何指定修订范围的详细信息,请参阅gitrevisions(7)。
对于只需要提交的SHA-1的脚本编写目的,请使用git rev-list
管道命令。
答案 2 :(得分:0)
bash脚本应该完成这项工作:
for commit in `git log --pretty=format:"%H" START_COMMIT..HEAD; do
# Is there a tag which points to this commit ?
tag=`git tag -l --points-at $commit`;
# Test if not the specific tag
if test "$tag" != "specific_tag"; then
# You can use any git command on the commit here
echo $commit;
fi ;
done