如何非交互式将匹配MARKETING_VERSION的代码行暂存到Git
非交互式暂存Git中匹配特定模式的代码行
如果要在shell脚本里非交互式暂存匹配MARKETING_VERSION的代码行,无需手动操作git add -p,可以用以下两种可靠方法:
方法一:基于内容模式生成补丁并暂存(推荐)
这种方法不依赖行号,直接匹配目标内容,稳定性更高(行号可能随文件修改发生变化):
- 生成仅包含目标行变更的diff补丁:
git diff exampleFile.txt | awk '/^@@/{hunk=0} /MARKETING_VERSION/{hunk=1} hunk' > temp.patch
- 将补丁应用到Git缓存区(仅暂存目标行):
git apply --cached temp.patch
- 清理临时文件:
rm temp.patch
方法二:基于已知行号暂存
如果确定目标行号稳定不变,可直接指定行号提取对应hunk的补丁:
- 获取文件当前diff,提取包含目标行的hunk:
git diff exampleFile.txt | awk -v lines="1191 1245" ' BEGIN{split(lines, arr)} /^@@/{ split($2, r1, /,/); start1=substr(r1[1],2); len1=r1[2]+0 split($3, r2, /,/); start2=substr(r2[1],2); len2=r2[2]+0 in_hunk=0 for(i in arr){ line=arr[i] if(line >= start1 && line <= start1+len1-1){ in_hunk=1 break } } } in_hunk' > temp.patch
- 应用补丁到缓存区并清理临时文件:
git apply --cached temp.patch rm temp.patch
注意:如果文件还未被Git追踪,先执行git add -N exampleFile.txt(--intent-to-add参数),让Git识别该文件后再执行上述命令。
内容的提问来源于stack exchange,提问作者Samantha
相关产品推荐
相关产品推荐

