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

如何让Git仅列出合并时新增的非父提交来源的修改?

如何单独列出Git合并提交中的手动修改内容

问题背景

在使用Git 2.42.0.windows.2版本及Bash控制台执行合并操作时,为使代码可编译进行了手动修改,并将这些修改与合并本身的变更一同提交。这些手动修改不属于合并提交的任意父提交,是从合并提交开始新增的内容。尝试了git diff -c、git diff --cc、git diff --cc --combined-all-paths及git diff-tree -c -p命令,均未得到预期结果。

测试场景示例

  • 初始有内容为Original file2 content.的file2文件
  • 创建分支A和B,二者均对file2进行了修改
  • 合并后提交前,手动添加了带有“m”标记的内容(用于解决编译问题的新增内容)

期望输出格式类似:

file2: line 6 +Extra content to make the merge between A and B work.

解决方案

要单独提取合并提交中不属于任何父提交的手动修改,可以利用git merge-tree模拟自动合并的结果,再与实际合并提交对比:

针对当前合并提交(HEAD)

直接执行以下命令:

git diff --no-index <(git merge-tree HEAD^1 HEAD^2) HEAD

针对特定合并提交

如果需要查看指定哈希的合并提交(比如哈希为abc123),替换HEAD为对应哈希即可:

git diff --no-index <(git merge-tree abc123^1 abc123^2) abc123

命令原理

  • git merge-tree HEAD^1 HEAD^2:模拟将两个父提交自动合并后的内容(无手动修改的理想合并结果)
  • git diff --no-index:对比模拟合并结果与实际提交的内容,差异部分就是你手动添加的修改

调整输出格式

如果需要更简洁的行号+内容样式,可以配合--stat参数:

git diff --no-index <(git merge-tree HEAD^1 HEAD^2) HEAD --stat=1000,1000

内容的提问来源于stack exchange,提问作者Charles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:40:24