如何使用git grep检索指定commit新增且当前仍存在的内容
Git 检索指定commit新增且当前仍存在的关键词方法
操作步骤
- 首先定义目标commit哈希,提取该commit的新增差异,过滤无效的文件头行:
# 替换为你要检索的目标commit前缀/完整哈希,示例中为76894a6 TARGET_COMMIT=76894a6
- 执行差异化对比脚本,精准识别该commit新增的指定关键词位置,排除旧版本中已存在的同关键词:
# 可替换keyword后的内容为你要检索的目标关键词,示例中为apple git diff $TARGET_COMMIT^ $TARGET_COMMIT | \ awk -v keyword="apple" ' /^-/ {old_line = substr($0,2)} /^\+/ { new_line = substr($0,2) if (old_line != "" && index(new_line, keyword) > 0) { split(old_line, old_words, " ") split(new_line, new_words, " ") for (i=1; i<=length(new_words); i++) { if (new_words[i] == keyword && old_words[i] != keyword) { print "匹配到新增关键词所在行:" new_line print "关键词在该行的位置:第"i"个单词" } } } old_line = "" }'
- 最后验证匹配到的内容在当前master分支仍未被修改删除:
# 替换引号内内容为上一步输出的匹配行内容,检索当前master分支是否存在对应内容 git grep "Banana apple dolor apple amet" master
示例适配说明
你给出的提交记录中,commit 76894的旧行内容为Apple apple dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.,新行内容为Banana apple dolor apple amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.,上述脚本会对比新旧行的单词位置,仅匹配到第一个位置新增的apple,自动跳过原本就存在的第二个位置的apple,完全符合你的检索要求。
内容的提问来源于stack exchange,提问作者foxiris
相关产品推荐
相关产品推荐

