如何用Git Diff筛选仅修改uuid属性的配置文件?
如何让Git Diff过滤掉仅修改uuid属性的配置文件
当然有办法,核心思路是先识别出那些仅修改了uuid属性的文件,然后要么在diff时排除它们,要么直接丢弃这些文件的变更。下面是两种实用的解决方案:
方案1:仅展示非uuid专属变更的文件
如果你只想让git diff输出那些除了uuid之外还有其他修改的文件,可以用这个组合命令:
git diff $(git diff --name-only | while read file; do # 检查当前文件的diff中,除了uuid行外是否还有其他变更行 if git diff "$file" | grep -vE '^[+-].*(uuid|\"uuid\"):' | grep -qE '^[+-]'; then echo "$file" fi done)
命令解释:
git diff --name-only:先列出所有有变更的文件- 遍历每个文件,用
git diff "$file"获取该文件的具体变更 grep -vE '^[+-].*(uuid|\"uuid\"):':去掉所有修改uuid行的变更(兼容JSON/YAML等不同格式的uuid字段)grep -qE '^[+-]':如果过滤后还有其他变更行(即文件不止改了uuid),就把这个文件加入最终的diff列表
方案2:直接丢弃仅修改uuid的文件变更
如果你的需求是直接撤销那些只改了uuid的配置文件的修改,可以用这个脚本:
git diff --name-only | while read file; do # 检查文件是否仅修改了uuid if ! git diff "$file" | grep -vE '^[+-].*(uuid|\"uuid\"):' | grep -qE '^[+-]'; then # 恢复该文件到HEAD版本(丢弃变更) git checkout HEAD -- "$file" fi done
注意事项:
- 可以根据你的配置文件格式调整正则表达式,比如如果uuid字段是
uuid = xxxx,就把正则改成'^[+-].*uuid =' - 如果你用的是Git Bash或类Unix终端,上面的命令直接可用;Windows用户建议用WSL或Git Bash执行
内容的提问来源于stack exchange,提问作者joachim
相关产品推荐
相关产品推荐

