如何通过Bash脚本获取单次提交中文件的变更及新增行号?
获取Git提交中文件的修改与新增行号
问题分析
你当前的脚本仅提取了diff块的起始行号信息,无法直接定位到具体的修改和新增行。要实现需求,需要直接解析git diff输出中带+标记的行对应的目标文件行号。
解决方案
使用以下Bash脚本即可获取所有修改及新增的行号:
git diff --unified=0 HEAD origin/develop .gitlab-ci.yml | awk ' /^@@/ { split($3, a, /[+,]/); current_line = a[1]; next; } /^\+/ && !/^\+\+\+/ { print current_line; current_line++; } '
脚本工作原理
git diff --unified=0 HEAD origin/develop .gitlab-ci.yml:生成无上下文差异输出,仅保留变更相关的行,减少冗余信息awk处理逻辑:- 匹配
@@开头的差异块标记行,从中解析出当前变更块在本地文件中的起始行号 - 匹配以
+开头但不是+++(文件路径行)的行,这就是新增或修改的行,打印当前行号后将行号自增,处理下一行变更
- 匹配
示例验证
对应你提供的示例场景:
本地.gitlab-ci.yml内容:
a b c
远程develop分支的文件内容:
a k
执行脚本后会输出:
2 3
刚好对应修改的第2行和新增的第3行,符合预期。
内容的提问来源于stack exchange,提问作者David Wong
相关产品推荐
相关产品推荐

