Git: 搜索

Git Grep

Git 提供了一个 grep 命令,你可以很方便地从提交历史或者工作目录中查找一个字符串或者正则表达式。

grep 一些选项:

  • -n, 输出 Git 所找到的匹配行行号
  • –count, 输出概述的信息
  • -p, 查看匹配的行是属于哪一个方法或者函数
  • –and, 在同一行同时包含多个匹配
  • –break 和 –heading, 使输出更加易读

示例:

1
2
3
4
5
6
7
8
# Looks for time_t in all tracked .c and .h files in the working directory and its subdirectories.
git grep 'time_t' -- '*.[ch]'
# Looks for a line that has #define and either MAX_PATH or PATH_MAX.
git grep -e '#define' --and \( -e MAX_PATH -e PATH_MAX \)
# Looks for a line that has NODE or Unexpected in files that have lines that match both.
git grep --all-match -e NODE -e Unexpected

Git 日志搜索

或许你不想知道某一项在 哪里 ,而是想知道是什么 时候 存在或者引入的。 git log 命令有许多强大的工具可以通过提交信息甚至是 diff 的内容来找到某个特定的提交。

例如,如果我们想找到 ZLIB_BUF_MAX 常量是什么时候引入的,我们可以使用 -S 选项来显示新增和删除该字符串的提交。

1
$ git log -SZLIB_BUF_MAX --oneline

如果你希望得到更精确的结果,你可以使用 -G 选项来使用正则表达式搜索。

行日志搜索

在 git log 后加上 -L 选项即可调用,它可以展示代码中一行或者一个函数的历史。