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

如何使用Git输出指定修订范围的短提交哈希与对应变更文件?

实现方法

你原命令的格式问题来自--name-only参数的默认逻辑:该参数会在提交信息块输出完成后,将每个变更文件单独打印为一行,同时自动插入空行分隔不同提交,Git没有内置参数可以直接把变更文件和提交哈希拼接在同一行,用awk做流处理即可实现需求,无额外依赖,全环境兼容。

  • 如果你需要常规的空格分隔格式(提交哈希在前,后跟变更文件,文件间用空格分隔),直接执行以下命令:
git --no-pager log --name-only --format="%H" master.. | awk '
BEGIN { cur_hash = ""; cur_files = "" }
/^[0-9a-f]{7,40}$/ {
    if (cur_hash != "") print cur_hash, cur_files
    cur_hash = substr($0, 1, 7)
    cur_files = ""
    next
}
NF > 0 {
    cur_files = cur_files ? cur_files " " $0 : $0
}
END { if (cur_hash != "") print cur_hash, cur_files }
'
  • 如果你需要和你给出的示例完全一致,同提交的多个文件名用逗号分隔,使用以下版本即可:
git --no-pager log --name-only --format="%H" master.. | awk '
BEGIN { cur_hash = ""; cur_files = "" }
/^[0-9a-f]{7,40}$/ {
    if (cur_hash != "") print cur_hash, cur_files
    cur_hash = substr($0, 1, 7)
    cur_files = ""
    next
}
NF > 0 {
    cur_files = cur_files ? cur_files "," $0 : $0
}
END { if (cur_hash != "") print cur_hash, cur_files }
'

调整说明

  • 命令中substr($0, 1, 7)是取提交哈希的前7位,和原--oneline参数输出的短哈希长度一致,如果需要完整长度的提交哈希,把该行替换为cur_hash = $0即可。
  • 逻辑会自动过滤原输出中的所有空行,每一行对应一个提交。如果你需要变更文件在前、提交哈希在后,把所有print cur_hash, cur_files替换为print cur_files, cur_hash即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:42:20