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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:09:03