前置知识: Git

git-grep

1 minIntermediate2026/6/14

git grep详解:在Git仓库中高效搜索代码,比grep更快的搜索方式。

1. git grep 概述

1.1 什么是 git grep

git grep 在 Git 仓库的跟踪文件中搜索,不需要索引文件,比普通 grep 更快。

1.2 优势

特性git grep普通 grep
搜索范围只搜跟踪文件所有文件
速度较慢
忽略文件自动忽略 .gitignore需手动排除
指定版本
并行搜索需配置

2. 基本用法

2.1 搜索当前工作区

# 搜索关键词
git grep "TODO"
git grep "function auth"

# 显示行号
git grep -n "TODO"

# 只显示文件名
git grep -l "TODO"

# 统计匹配数
git grep -c "TODO"

# 忽略大小写
git grep -i "todo"

2.2 搜索指定版本

# 在指定提交中搜索
git grep "TODO" HEAD~3
git grep "TODO" v1.0.0
git grep "TODO" main

# 在两个版本间搜索
git grep "TODO" main..feature

2.3 搜索指定文件

# 只搜特定文件
git grep "TODO" -- '*.js'
git grep "TODO" -- 'src/'

# 排除文件
git grep "TODO" -- ':!*.test.js'

3. 高级用法

3.1 正则搜索

# 基本正则
git grep -E "TODO|FIXME|HACK"

# Perl 正则
git grep -P "function\s+\w+\(" -- '*.js'

# 匹配整个单词
git grep -w "auth"

3.2 上下文显示

# 显示匹配行前后各2行
git grep -C 2 "TODO"

# 只显示后续行
git grep -A 5 "function auth"

# 只显示前面行
git grep -B 2 "return"

3.3 搜索多个模式

# 匹配任一模式
git grep -e "TODO" -e "FIXME"

# 必须同时匹配
git grep -e "import" --and -e "from"

4. 实际场景

4.1 查找所有 TODO

git grep -n "TODO\|FIXME\|HACK" -- '*.ts' '*.js'

4.2 查找废弃 API 使用

git grep -n "oldMethod\|deprecatedAPI" -- 'src/'

4.3 查找安全敏感代码

git grep -n "eval(\|innerHTML\|dangerouslySetInnerHTML" -- '*.js' '*.jsx' '*.ts' '*.tsx'

4.4 比较版本间的变更

# 查找新增的 TODO
git diff HEAD~5..HEAD | git grep "^+.*TODO"