如何在git diff结果中查找带文件名和行号的新增TODO项
实现方案
你可以用以下组合命令解决所有问题,只匹配当前分支新增的TODO,自动排除主分支历史遗留条目,同时输出所属文件路径和具体内容:
# 主分支为develop的情况,适配main/master直接替换第一个参数即可 git diff -U0 develop HEAD -- . \ | grep -B2 -A0 '^+.*TODO' \ | grep -E '^\+|^diff --git' \ | sed 's#diff --git a/\(.*\) b/.*#\1#' \ | awk '!/^+/ {file=$0} /^+/ {print file ":" substr($0,2)}'
输出示例
src/utils/summary.js: // TODO: How to handle when summary is missing? src/services/request.js: // TODO: How to handle this error? Exception? src/modules/basket.js: // TODO: add function to build basket, maybe? test/mock/index.js: // TODO: Find a better place to set up this mock
能力说明
- 自动区分新增/历史TODO:只匹配diff中前缀为
+的新增行,不会列出主分支已有的历史TODO - 自带文件路径定位:每条结果前会输出TODO所属的相对路径,直接点击就能跳转对应文件
- 支持无备注TODO匹配:即使TODO后没有任何说明文字,也能正常捕获输出,不会遗漏
快捷配置
如果需要高频使用,可以将命令配置为git别名,打开~/.gitconfig添加以下配置即可:
[alias] check-todo = "!f() { base=${1:-develop}; git diff -U0 $base HEAD -- . | grep -B2 -A0 '^+.*TODO' | grep -E '^\\+|^diff --git' | sed 's#diff --git a/\\(.*\\) b/.*#\\1#' | awk '!/^+/ {file=$0} /^+/ {print file \":\" substr($0,2)}'; }; f"
后续直接执行git check-todo就能检查,需要指定主分支时传参即可,例如git check-todo main。
内容的提问来源于stack exchange,提问作者Vince Varga
相关产品推荐
相关产品推荐

