如何查看Git合并提交的完整差异及双方变更归属
如何在Git合并后完整展示双方分支的所有变更及归属
要实现查看分支分叉以来的所有变更(含无冲突代码块、新增文件),并明确每个变更归属父分支的需求,可以通过以下组合命令或自定义别名解决现有git show参数的局限:
组合命令实现完整视图
1. 列出所有变更文件及分支归属
使用git diff-tree拆分合并提交为两个虚拟父分支视图,显示每个文件的变更操作及来源分支:
git diff-tree -r --name-status -m <MERGE_COMMIT>
输出示例(对应你的演示场景):
A file_a M file A file_b
其中:
file_a、file_b为新增文件,分别来自分支A、分支Bfile为双方共同修改的文件
2. 查看带分支归属标注的代码差异
对于有内容修改的文件(如file),用git show -c查看带双父分支标注的差异:
git show -c <MERGE_COMMIT>:file
差异会通过两列符号区分两个父分支的变更,示例:
@@@ -1,1 -1,1 +1,3 @@@ base line +++ b/file + line from branch A + line from branch B (resolved conflict)
列符号对应规则:
- 第一列(
---)对应第一个父分支(通常是合并时的目标分支) - 第二列(
+++)对应第二个父分支(通常是被合并的特性分支)
通过符号可以直接判断每一行变更的归属。
3. 查看新增文件的完整内容
新增文件的内容可直接通过git show查看:
git show <MERGE_COMMIT>:file_a git show <MERGE_COMMIT>:file_b
自定义Git别名简化操作
如果需要频繁使用该视图,可以创建全局别名整合所有步骤:
git config --global alias.merge-show '!f() { git diff-tree -r --name-status -m $1; echo -e "\n--- Detailed Changes ---"; git show -c $1; }; f'
使用时只需运行:
git merge-show <MERGE_COMMIT>
该别名会先展示所有变更文件的分支归属,再显示带标注的代码差异,清晰直观。
现有命令的局限性说明
你提到的参数无法满足需求的原因:
--cc(git show默认):仅展示手动解决的冲突块,自动合并的代码和新增文件完全被忽略-c:能显示自动合并的代码块,但不会列出新增文件-m:会显示新增文件,但将两个分支的变更拆分为独立视图,无法直接关联合并后的最终状态- 合并基对比命令
git diff $(git merge-base HEAD^1 HEAD^2) HEAD:能显示所有变更,但无法标注每个变更的来源分支
内容的提问来源于stack exchange,提问作者akraf
相关产品推荐
相关产品推荐

