当标记指向其他分支上的提交时,列出自上次发布以来的所有提交

List all commits since last release when the tag points to a commit on other branch

我需要列出自上次发布以来对 master 分支所做的所有提交。我必须使用 pygit2 来实现此功能。但是这里的情况有点不同。

发布是在 master 分支上使用 tag 提交到 other 分支。天真的方法是找到最后一个 tagged commitsha 并将历史记录从 HEAD 向下移动到这个 sha。但是这个 tagged commit 不是针对我的 master 分支,而是针对 other 分支。有趣的是,当 运行 超过 master 分支时,以下给出了正确的输出:

$ git log sometag..HEAD --oneline

此处,sometag 指向 other 分支上的提交。所以,我想知道如果我有在 master 分支上进行的所有提交的列表,我该如何以编程方式实现它。

我想到的一个解决方案是找到 tagged committimestamp 并过滤我的提交列表。 git log 是怎么做到的,有什么想法吗?

我认为这会对您有所帮助:首先,我们使用 Repository.walk() to get a Walker (commit iterator), and then we modify it (Walker.hide()) 排除所有可从 sometag:

访问的提交
from pygit2 import Repository
from pygit2 import GIT_SORT_TIME

repo = Repository('.git')
start = repo.revparse_single('refs/heads/master')
release_tag = repo.revparse_single('refs/tags/sometag')

walker = repo.walk(start.id, GIT_SORT_TIME)
walker.hide(release_tag.id)
for commit in walker:
    print commit.message