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

如何查看git log --grep筛选提交的合并压缩版差异?

如何合并显示Git中特定提交的累积差异

如果你想把所有提交信息包含“foo”的提交的补丁合并成单个整体差异内容,可以用以下两种方法:

方法一:提交连续时直接对比范围

如果符合条件的提交是线性连续的(中间没有其他无关提交),可以直接用git diff对比最早和最晚提交的范围:

  1. 获取最早的符合条件的提交哈希,并取它的父节点:
git log --grep=foo --reverse --format="%H" | head -1

加上^表示该提交的父节点,比如提交哈希是abc123,则父节点是abc123^

  1. 获取最晚的符合条件的提交哈希:
git log --grep=foo --format="%H" | tail -1
  1. 合并两个部分,执行diff命令:
git diff $(git log --grep=foo --reverse --format="%H" | head -1)^..$(git log --grep=foo --format="%H" | tail -1)

这个命令会输出从最早提交的父节点到最晚提交之间的所有更改,也就是这些提交的累积差异。

方法二:提交不连续时用临时分支

如果符合条件的提交分散在提交历史中,中间夹杂其他无关提交,用临时分支的方法更准确:

  1. 创建并切换到临时分支:
git checkout -b temp-foo-commits
  1. 按顺序将所有符合条件的提交cherry-pick到临时分支:
git log --grep=foo --reverse --format="%H" | xargs git cherry-pick

--reverse确保提交按从旧到新的顺序应用,避免冲突(如果有冲突需要手动解决)

  1. 对比原分支和临时分支的差异,得到合并后的总补丁:
git diff main temp-foo-commits  # 将main替换为你的原分支名称,比如master、dev等
  1. 完成后切换回原分支并删除临时分支:
git checkout main
git branch -D temp-foo-commits

补充:快速查看合并后的差异统计

如果只想看更改的文件统计信息,而不是完整diff,可以在diff命令后加--stat参数:

git diff --stat $(git log --grep=foo --reverse --format="%H" | head -1)^..$(git log --grep=foo --format="%H" | tail -1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:24:19