如何查看git log --grep筛选提交的合并压缩版差异?
如何合并显示Git中特定提交的累积差异
如果你想把所有提交信息包含“foo”的提交的补丁合并成单个整体差异内容,可以用以下两种方法:
方法一:提交连续时直接对比范围
如果符合条件的提交是线性连续的(中间没有其他无关提交),可以直接用git diff对比最早和最晚提交的范围:
- 获取最早的符合条件的提交哈希,并取它的父节点:
git log --grep=foo --reverse --format="%H" | head -1
加上^表示该提交的父节点,比如提交哈希是abc123,则父节点是abc123^
- 获取最晚的符合条件的提交哈希:
git log --grep=foo --format="%H" | tail -1
- 合并两个部分,执行diff命令:
git diff $(git log --grep=foo --reverse --format="%H" | head -1)^..$(git log --grep=foo --format="%H" | tail -1)
这个命令会输出从最早提交的父节点到最晚提交之间的所有更改,也就是这些提交的累积差异。
方法二:提交不连续时用临时分支
如果符合条件的提交分散在提交历史中,中间夹杂其他无关提交,用临时分支的方法更准确:
- 创建并切换到临时分支:
git checkout -b temp-foo-commits
- 按顺序将所有符合条件的提交cherry-pick到临时分支:
git log --grep=foo --reverse --format="%H" | xargs git cherry-pick
--reverse确保提交按从旧到新的顺序应用,避免冲突(如果有冲突需要手动解决)
- 对比原分支和临时分支的差异,得到合并后的总补丁:
git diff main temp-foo-commits # 将main替换为你的原分支名称,比如master、dev等
- 完成后切换回原分支并删除临时分支:
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
相关产品推荐
相关产品推荐

