分支 rebase 过、提交号全变了时,直接拿两段 commit 区间比 diff 不太直观。Git 自带的 range-diff 可以按提交对比两组 patch,看看每个提交的改动有没有在改写后保留下来。环境:Git 2.19+。
git range-diff main..feature~3 main..feature
上面假设 feature 最近整理成了 3 个提交,前一组是整理前的提交区间,后一组是整理后的区间。实际使用时把两个区间换成 rebase 前后各自的基线和分支范围。
如果只想看某次合并前后的两组提交,也可以先记下旧分支指针,再运行:
git range-diff old-feature..old-feature~3 new-feature~3..new-feature
输出里的 = 表示补丁基本对应,! 表示对应提交内容发生了变化,< 或 > 表示一边独有的提交。它比较的是 patch 内容,不是 commit id;提交拆分或合并时结果可能需要人工判断。