首页/开发/Git 与协作速查/git range-diff 对比两次变基的结果
合并变基与冲突71 条

git range-diff 对比两次变基的结果

比较同一段提交在两个版本(如变基前后、两个 MR 分支)之间的对应关系,回答「这次强制推送改了什么」。

Git 与协作速查开发更新于 2026-10-13

对比两次变基的结果

比较同一段提交在两个版本之间的对应关系,例如变基前后,或者同一功能的两个分支。它回答的是评审时最关心的问题:本次强制推送到底改了什么,是内容有变化,还是仅仅换了位置与哈希。

基本信息

用途比较两组提交序列之间的对应关系
语法git range-diff <旧范围> <新范围>
典型场景评审强制推送、核对变基结果
输出标记等号表示等价,感叹号表示有改动,加号减号表示新增或缺失
使用前提两个范围应包含数量相当的提交

典型使用场景

  • 评审同事强推之后的分支到底改了什么
  • 核对变基结果是否只是移动位置
  • 比较两条功能分支解决同一问题的差异
  • 确认压缩或整理提交时没有误删内容
  • 排查同一补丁在两次评审里结论不同的原因

常用示例

常用示例
git range-diff main..feature@{1} main..feature                    # 变基前后对照
git range-diff origin/main..origin/feature origin/main..feature    # 远端与本地对照
git reflog show feature | head                                    # 找到变基前的引用
git range-diff v1..v1-old v1..v1-new                              # 两个范围直接对照

输出标记读法

标记含义
等号两侧提交内容等价,只是位置或哈希变化
感叹号内容有改动,下面继续列出差异
加号新范围里多出来的提交
减号新范围里缺失的提交
输出会把每条提交配对展示,配合变基前的引用位置一起看,几分钟就能判断这次强推是否只是重排。
旧引用来自本地日志,换台机器就没有了;评审强推时可以提前记录引用位置,便于事后核对。
它展示的是提交之间的对应关系,不替代通读差异:标记为等价的两侧仍要确认改动是否覆盖了此前提出的评审意见。
范围写法可以用三点形式明确基线,写错时输出为空或直接报错,遇到异常先分别查看两侧的提交列表确认范围。

易错点

  • 两个范围的提交数量差异过大,输出为空或难以配对,先分别查看两侧日志确认范围
  • 只依赖本地日志找到旧引用,仓库清理或换机器后无法比对,评审前应提前留档
  • 把等价标记理解成「完全没有变化」:重排同样会改变哈希,等价只说明内容一致
  • 用它替代通读差异:判定等价后仍要确认改动是否覆盖了评审意见

数据来源与参考

  • Git 官方文档:git-range-diff
  • Pro Git 2nd Edition · 7.7 重置揭密(reflog 相关)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌