You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用git log --graph时如何折叠已完全合并的分支?

如何在git log --graph中折叠已完全合并的分支?

嘿,我完全懂你的需求——你想用git log --graph查看提交历史时,自动折叠那些已经完全合并(且已删除)的分支,同时保留未合并分支的完整关联,而不是像--first-parent那样丢失提交之间的链接关系。

Git本身没有原生的“一键折叠已合并分支”功能,但我们可以通过组合几个选项和自定义别名来实现这个效果,下面是具体的方案:

核心解决方案:使用--simplify-merges选项

git log的--simplify-merges选项正是为这类场景设计的:它会自动简化合并提交的展示,去掉那些已经通过其他路径完全可达的分支提交链,只保留合并节点和未合并分支的完整历史,完美匹配你的需求。

试试这个命令:

git log --graph --branches --simplify-merges --not master

命令作用拆解:

  • --graph:保留分支图的可视化展示结构
  • --branches:包含所有本地分支的提交记录
  • --simplify-merges:自动折叠已完全合并的分支提交链,同时保留合并节点与未合并分支的关联(比如你提到的879e64a会正确显示为305d031的第二父提交,不会丢失链接)
  • --not master:排除已经合并到基线分支master的提交(如果你的基线不是master,替换成对应的分支名即可)

封装成Git别名

为了日常使用更方便,你可以把这个命令封装成Git别名。打开你的.gitconfig文件(通常在用户主目录下),添加以下内容:

[alias]
    log-clean = log --graph --branches --simplify-merges --not master

之后你只需要输入git log-clean,就能快速得到折叠后的分支图了。

效果验证

对比你给出的示例,这个命令会实现:

  • 折叠已完全合并的分支a、c的提交链,只保留对应的合并节点(比如2e94cc8 Merge branch b和16bb2c5 Merge branch f)
  • 完整保留未合并分支d、e的提交链以及它们与主分支的关联,不会像--first-parent那样丢失关键链接

如果你的需求更精细,比如需要排除特定分支,还可以结合--exclude选项,比如:

git log --graph --branches --simplify-merges --not master --exclude=refs/heads/old-branch

内容的提问来源于stack exchange,提问作者Robin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:28:05