我正在试图弄清楚如何获取自上一个标记以来所有更改的更改日志。
0.3 //tag
did even more stuff //commit
did stuff //commit
0.2 //tag
... //commit(s)
0.1 //tag
我想得到:
did even more stuff
did stuff
我从here尝试了这个命令,但它只获得了自上一个标记以来的提交(不是最后一个标记):
git log --pretty=format:"- %s%n%b" --since="$(git show -s --format=%ad `git rev-list --tags --max-count=1`)"
答案 0 :(得分:0)
我觉得这不是正确的做法,但这就是我现在所拥有的。
这也假设您希望标签按照提交的时间顺序排列(可能是您想要的也可能不是...请参阅torek对OP的评论)。
使用git rev-parse --tags
获取标记引用。
使用git rev-list --max-count=2 --no-walk --stdin
获取两个“最近的”提交(``-no-walk`避免获取任何未明确命名的内容)。
然后使用一点sed
魔法('x;n;s/$/../;G;s/\n//;p'
)将我们获得的转速转换为所需的选择器。
$ git rev-parse --tags | git rev-list --max-count=2 --no-walk --stdin | sed -n 'x;n;s/$/../;G;s/\n//;p'
$ range=$(git rev-parse --tags | git rev-list --max-count=2 --no-walk --stdin | sed -n 'x;n;s/$/../;G;s/\n//;p')
$ git log --pretty=format:'- %s%n%b' "$range"
或者,我只是想到这个你可能也会使用这样的东西:
$ tag1=$(git describe --abbrev=0)
$ tag2=$(git describe --abbrev=0 "$tag1~")
$ git log --pretty=format:'- %s%n%b' "${tag1}..${tag2}"
答案 1 :(得分:0)
以下是基于git log
的不同方法(从指定的起始点开始向后移动历史记录,默认HEAD
)和--decorate
:
git log --format='%H %d' | \
awk '$2 ~ "tag:" { ntags++; } { if (ntags == 1) print $1 }'
这一次考虑每个可达提交(由git log
打印,%H打印哈希,%d添加指向该提交的分支和标记名称)。然后,awk
代码将提交计为"标记为"如果它至少有一个标记,无论它有多少多个标记。对于所有在第一个标记提交之前或之后但尚未在第二个标记提交的提交,它会打印哈希值。
请注意,默认情况下,git log
按日期对提交进行排序;您可能希望将其限制为--topo-order
,具体取决于您的需求。