You need to enable JavaScript to run this app. 为什么git diff指定分支+哈希与仅指定单个哈希的输出结果不同
优惠活动
大模型
产品
解决方案
定价
更多

为什么git diff指定分支+哈希与仅指定单个哈希的输出结果不同

两种命令结果不一致的核心原因

这是Git的diff命令语义差异,加上重命名检测机制共同导致的:

  • 命令git diff <单个commit哈希>的作用是对比指定commit的快照和当前工作区的文件内容。你当前分支已经将SHARED/mapplets/mpl_CBTERDEP_UK.xml移动到了DWH4DMS/mapplets/目录下,在对比老提交和工作区时,Git默认不会对这类跨工作区和提交的对比启用完整重命名检测,所以会直接列出老提交中存在、当前工作区已经删除的SHARED目录下的对应文件。
  • 命令git diff <分支名> <commit哈希>的作用是对比两个提交快照的差异。此时Git会默认启用重命名检测:识别到SHARED下的文件被删除、DWH4DMS下新增了一个内容高度相似的同名称文件,就会将这两个变更合并为「文件移动/重命名」的变更,因此输出时只会展示目标路径下的DWH4DMS/mapplets/mpl_CBTERDEP_UK.xml作为差异项,不会再单独展示被删除的SHARED目录下的文件。

验证方案

你可以给两个命令都加上--no-renames参数关闭重命名检测,两者输出的差异文件列表就会完全一致:

# 关闭重命名检测的单个哈希diff
git diff --no-renames --name-only fb6066b88ecd4
# 关闭重命名检测的双提交diff
git diff --no-renames --name-only DWH4DM-9676 fb6066b88ecd4

你也可以给单个哈希的diff加上--find-renames参数强制开启重命名检测,输出结果就会和双提交diff的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 06:54:04