Git:如何列出此分支上的提交但不是合并分支的提交

时间:2012-04-20 14:25:17

标签: git branch git-branch git-log

假设您的git提交历史记录如下:

A---B---C---D---E---F master
     \         /
      X---Y---Z topic

是否可以让git列表只有master,A-F上的提交?换句话说,如果提交是在合并分支中,我不希望它显示。

4 个答案:

答案 0 :(得分:119)

git log有选项--first-parent,因此您无法获得topic历史记录。

master合并时,master提交是合并中的第一个父项。 Git log只允许使用--first-parent显示那些提交,所以你得到了正确的东西。

答案 1 :(得分:16)

还有另一种通用方法可以解决这个问题,它不依赖--first-parent,这在某些情况下会有所帮助..使用分支排除过滤器

git log origin/topic ^origin/master这将为您提供origin/topic的日志,其中删除了所有origin/master次提交。

您还可以添加--no-merges,这将隐藏您可能想要或可能不想要的合并提交。

另一个方便的提示是使用shortlog而不是log,这将为您提供更多的简化摘要,这些摘要可以方便发行说明,或者在分支中进行沟通。

<强>更新
重读之后,你实际上想要的几乎与我发布的相反;但它最终将排除master和foo(git log origin/master ^origin/foo)上的所有内容。但是,您也可以使用git log origin/master --no-merges

获得您要求的内容(隐藏属于合并的所有提交)

答案 2 :(得分:0)

查尔斯的答案对我有用。

git log has option --first-parent --no-merges, so you won't get topic history.

但是,如果您对Git活动使用任何图形用户界面,例如Git扩展,SourceTree,Tortoise Git等,

然后,可以使用直接选项来检查工具中的第一个父对象。我想将这个答案添加到列表中,因为大多数人都觉得图形界面很容易。并且您可以根据需要直接从工具的特定分支中挑选所有提交。

我已经附上了两个工具的示例,其他工具也是如此:[我已经模糊了用户名和git repo名称,因为这是一个私有存储库,但是您仍然可以先了解如何使用工具中的父项]

  1. Git扩展
    • 打开Git扩展->检出要查看提交的功能分支,有一个选项可以选择第一个提交,如图所示:

enter image description here

  1. 龟龟
    • 打开存储库文件夹->单击“显示来自Tortoise Git的日志”->检出分支,然后选择“第一次提交”,如图所示

enter image description here

答案 3 :(得分:-3)

这不起作用吗?

git log master
git log --stat master