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


89

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

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

可以让git只列出master,AF上的提交吗?换句话说,如果提交在合并的分支上,则我不希望其显示。


2
那么,如何将GIT知道的D,并Z为合并后的部门的一部分?
罗曼(Romain)2012年

2
从母版合并时,先前的母版提交是合并中的第一个父级。git log允许只显示带有的提交--first-parent,因此您可以找到正确的东西
CharlesB 2012年

Answers:


133

git log具有option --first-parent,所以您将不会获得topic历史记录。

从合并时mastermaster提交是合并中的第一个父级。Git日志仅显示带有--first-parent的那些提交,因此您可以找到正确的东西。


25
+1 --first-parent:)与--no-merges您结合可以隐藏合并提交
c00kiemon5ter 2012年

我投票赞成,但与我的回答相比仍然显得过高
UpAndAdam

22

TLDRgit log origin/master --no-merges将为您提供主日志,并排除任何合并的提交(在本例中为x,y,z)

原始积分

还有另一种不依赖此方法的通用方法,--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


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 Extension->检出要查看提交的功能分支,有一个选项可以选择第一个提交,如图所示:

在此处输入图片说明

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

在此处输入图片说明


-3

这行不通吗?

git log master
git log --stat master

没有那些不起作用。合并提交有两个父级。从这两个父母那里追溯回来的所有东西都在“主人”分支上。
GoZoner 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.