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 怎么知道D
和Z
中的哪一个是合并分支的一部分?
从 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 怎样将分支上的一个单文件合并到主分支上(master)