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

Posted

技术标签:

【中文标题】Git:如何列出此分支上的提交而不是合并分支上的提交【英文标题】:Git: How to list commits on this branch but not from merged branches 【发布时间】:2012-05-02 03:38:27 【问题描述】:

假设您的 git 提交历史如下所示:

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

是否可以只列出主节点 A-F 上的提交?换句话说,如果提交在合并的分支上,我不希望它显示。

【问题讨论】:

那么,git 怎么知道DZ 中的哪一个是合并分支的一部分? 从 master 合并时,以前的 master 提交是合并中的第一个父级。 git log 只允许显示带有--first-parent 的提交,所以你得到了正确的东西 How Do I run Git Log to see changes only for a specific branch? 的可能重复项 【参考方案1】:

git log 有选项--first-parent,所以你不会得到topic 历史记录。

当从master 合并时,master 提交是合并中的第一个父项。 Git 日志允许仅显示那些带有 --first-parent 的提交,所以你得到了正确的东西。

【讨论】:

+1 --first-parent 做到了 :) 结合 --no-merges 你可以隐藏合并提交【参考方案2】:

TLDR : git log origin/master --no-merges 会给你一个 master 日志并排除任何合并的提交(在本例中为 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

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

【讨论】:

【参考方案3】:

Charles 的回答对我有用。

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

但是,如果您在 Git 活动中使用任何图形用户界面,例如 Git Extension、SourceTree、Tortoise Git,

然后有直接选项可以检查工具中的第一个父级。我想将此答案添加到列表中,因为大多数人发现图形界面很容易。如果需要,您可以直接从工具中挑选来自该特定分支的所有提交。

我附上了两个工具的例子,其他工具也是类似的:[我已经模糊了用户名,git repo名称,因为这是一个私人存储库,但你仍然可以先了解如何使用工具的父级]

    Git 扩展 Open Git Extension -> Checkout 你想查看提交的功能分支,有一个选项可以选择第一个提交,如图所示:

    乌龟 Git 打开存储库文件夹 -> 点击 Show logs from Tortoise Git -> 签出分支并选择第一个提交,如图所示

【讨论】:

【参考方案4】:

这不行吗?

git log master
git log --stat master

【讨论】:

没有那些不起作用。合并提交有两个父级;从这两个父母追踪回来的所有东西都在“主”分支上。

以上是关于Git:如何列出此分支上的提交而不是合并分支上的提交的主要内容,如果未能解决你的问题,请参考以下文章

如何将本地未提交的更改合并到另一个 Git 分支?

git命令中 怎么把 git远程上的分支合并到远程主分支上

git 怎样将分支上的一个单文件合并到主分支上(master)

git---怎样将分支上的一个单文件合并到主分支上(master)

Git 常用命令

如何删除推送的 git 合并提交