【发布时间】:2013-02-13 07:11:46
【问题描述】:
我想列出仅属于特定分支的所有提交。
通过以下内容,它列出了来自分支的所有提交,也来自父级(主)
git log mybranch
我发现的另一个选项是排除 master 可访问的提交并给我我想要的,但我想避免知道其他分支名称的需要。
git log mybranch --not master
我试图使用git for-each-ref,但它也列出了 mybranch 所以实际上它排除了所有:
git log mybranch --not $(git for-each-ref --format '^%(refname:short)' refs/heads/)
更新:
我正在测试我不久前发现的一个新选项,直到现在看来这可能就是我想要的:
git log --walk-reflogs mybranch
更新 (2013-02-13T15:08):
--walk-reflogs 选项很好,但我检查了 reflogs 是否有过期时间(默认为 90 天,gc.reflogExpire)。
我想我找到了我正在寻找的答案:
git log mybranch --not $(git for-each-ref --format='%(refname)' refs/heads/ | grep -v "refs/heads/mybranch")
我只是从可用分支列表中删除当前分支,并使用该列表从日志中排除。这样我只能得到只有 mybranch 达到的提交。
【问题讨论】:
-
也看到了这个问题,但不一样
-
你确定这是你想要的吗?我发现最好记住一个目标:“我的分支上有什么不在上游”,或者“我的分支上有什么不在 master 中”。另外,虽然 git 的修剪速度很快,但随着分支的增多,它会变得更加昂贵。我有一个我使用的脚本,在 bzr 的“缺失”命令之后我称之为“git missing”。你可以在这里找到它:github.com/jszakmeister/etc/blob/master/git-addons/git-missing。
-
我实际上需要这个作为 post-receive 钩子,所以“master”不会总是要排除的分支
-
是的,StarPinkER 提到的副本对我来说效果很好:git log $(git merge-base HEAD branch)..branch
标签: git