如何对比Git两个分支各自引入的变更,排除无关提交干扰
问题原因
你直接执行git diff feature/A feature/B的本质是对比两个分支最新提交的全量文件快照差异。从提交图可以看出,feature/B的祖先包含c2f6030(对第3节的修改),而feature/A的祖先没有这个提交,所以这个无关改动会出现在diff结果中,不符合你「对比两个分支各自引入的变更差异」的需求。
解决方法
方法1:使用git range-diff(推荐)
git range-diff是Git专门用来对比两组提交序列改动差异的命令,会自动排除两组提交范围外的无关改动。
根据提交图,两个分支的共同分叉起点是79c6f39,执行以下命令即可:
git range-diff 79c6f39..feature/A 79c6f39..feature/B
在你的场景中两个分支引入的改动完全一致,执行后不会输出任何内容,符合预期。
方法2:手动对比补丁文件
如果你的Git版本较低不支持range-diff,可以手动生成两个分支的变更补丁再对比:
- 生成
feature/A相对于共同分叉点的改动补丁:
git diff 79c6f39 feature/A > a.patch
- 生成
feature/B相对于共同分叉点的改动补丁:
git diff 79c6f39 feature/B > b.patch
- 对比两个补丁文件的差异:
diff a.patch b.patch
方法3:快速校验改动是否完全一致
如果你只需要确认两个分支引入的变更是否完全相同,可以用git patch-id校验:
# 输出feature/A改动的patch哈希 git diff 79c6f39 feature/A | git patch-id # 输出feature/B改动的patch哈希 git diff 79c6f39 feature/B | git patch-id
如果两个命令输出的哈希值一致,说明两个分支引入的变更完全相同,无任何差异。
内容的提问来源于stack exchange,提问作者Felix ZY
相关产品推荐
相关产品推荐

