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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 20:42:33