You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看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、分支B
  • file为双方共同修改的文件

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:43:23