为何git diff-tree始终输出完整提交哈希,无法输出缩写哈希?
问题原因
git diff-tree是Git的底层管道命令,设计定位是给上层脚本、其他Git子命令提供稳定无歧义的输出,和git log这类面向终端用户的porcelain命令行为逻辑不同:
- 你测试时使用的
--abbrev-commit、--abbrev=10、--format=%h、--pretty=format:%h参数,仅对diff输出内容里引用的提交哈希、文件blob哈希生效,无法控制命令默认输出行首的提交ID字段。 - 当你给
git diff-tree传入单个提交(比如HEAD)时,命令默认输出的行首字段固定是40位完整长度的提交哈希,这个字段不受上述格式化参数影响。底层命令默认输出完整哈希,就是为了避免不同环境下缩写哈希长度不统一导致的解析错误。
你改用的git rev-parse --short --verify HEAD本身就是Git官方推荐的、专门用于获取提交短哈希的标准实现,完全适配这个需求场景。
如果一定要通过git diff-tree拿到短哈希,需要显式关闭默认的原生提交行输出,让命令完全遵循你指定的格式化规则,可使用如下命令:
git diff-tree -s --pretty=format:%h HEAD
命令里的-s(等价于--no-patch)会抑制默认的原始提交头、差异内容输出,只保留--pretty指定的格式化结果。
内容的提问来源于stack exchange,提问作者lxvs
相关产品推荐
相关产品推荐

