1. 查找某個關鍵字(好比函數名):git
$ git grep xmmap config.c: contents = xmmap(NULL, contents_sz, PROT_READ, diff.c: s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd, 0); git-compat-util.h: extern void *xmmap(void *start, size_t length, int prot, int fla read-cache.c: mmap = xmmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, refs.c: log_mapped = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, logfd, 0); sha1_file.c: map = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, fd, 0); sha1_file.c: idx_map = xmmap(NULL, idx_size, PROT_READ, MAP_PRIVATE, fd, 0); sha1_file.c: win->base = xmmap(NULL, win->len, sha1_file.c: map = xmmap(NULL, *size, PROT_READ, MAP_PRIVATE, f sha1_file.c: buf = xmmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); wrapper.c: void *xmmap(void *start, size_t length,
1.1 若是要顯示行號,添加‘-n’選項:app
$ git grep -n xmmap config.c:1016: contents = xmmap(NULL, contents_sz, PROT_READ, diff.c:1833: s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd, git-compat-util.h:291: extern void *xmmap(void *start, size_t length, int prot, int read-cache.c:1178: mmap = xmmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_ refs.c:1345: log_mapped = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, logfd, 0); sha1_file.c:377: map = xmmap(NULL, mapsz, PROT_READ, MAP_PRIVATE, fd, 0); sha1_file.c:479: idx_map = xmmap(NULL, idx_size, PROT_READ, MAP_PRIVATE, fd sha1_file.c:780: win->base = xmmap(NULL, win->len, sha1_file.c:1076: map = xmmap(NULL, *size, PROT_READ, MAP_PR sha1_file.c:2393: buf = xmmap(NULL, size, PROT_READ, MAP_PRIVATE, fd wrapper.c:89: void *xmmap(void *start, size_t length,
1.2 若是只顯示文件名,添加‘--name-only’選項:函數
$ git grep --name-only xmmap config.c diff.c git-compat-util.h read-cache.c refs.c sha1_file.c wrapper.c
1.3 統計每一個文件裏有多少行匹配內容,添加‘-c’選項:測試
$ git grep -c xmmap config.c:1 diff.c:1 git-compat-util.h:1 read-cache.c:1 refs.c:1 sha1_file.c:5 wrapper.c:1
1.4 查找git倉庫裏某個特定版本裏的內容,添加tag名或sha號:spa
$ git grep xmmap v1.5.0 v1.5.0:config.c: contents = xmmap(NULL, st.st_size, PROT_READ, v1.5.0:diff.c: s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd, v1.5.0:git-compat-util.h:static inline void *xmmap(void *start, size_t length, v1.5.0:read-cache.c: cache_mmap = xmmap(NULL, cache_mmap_size, v1.5.0:refs.c: log_mapped = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, logfd v1.5.0:sha1_file.c: map = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, v1.5.0:sha1_file.c: idx_map = xmmap(NULL, idx_size, PROT_READ, MAP_PRIVATE, fd v1.5.0:sha1_file.c: win->base = xmmap(NULL, win->len, v1.5.0:sha1_file.c: map = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, v1.5.0:sha1_file.c: buf = xmmap(NULL, size, PROT_READ, MAP_PRIVATE, fd
1.5 查找git倉庫裏某個特定版本、特定文件裏的內容(省略版本,默認當前版本),添加tag名或sha號、文件名:code
$ git grep xmmap v1.5.0 diff.c v1.5.0:diff.c: s->data = xmmap(NULL, s->size, PROT_READ, MAP_PRIVATE, fd,
2. 某些關鍵字的邏輯組合blog
2.1 與邏輯:某一行既包括...又包括...字符串
------------------->$ git grep -e 'pu' --and -e 'lic' a.txt:public c.txt:public c.txt:public
2.2 或邏輯:某一行包括...或者包括...string
------------------->$ git grep -e 'public' --or -e 'void' a.txt:public a.txt:void b.txt:void c.txt:public c.txt:public
--or 是默認行爲,若是省略:it
------------------->$ git grep -e 'public' --or -e 'void' a.txt:public a.txt:void b.txt:void c.txt:public c.txt:public ------------------->$ git grep -e 'public' -e 'void' a.txt:public a.txt:void b.txt:void c.txt:public c.txt:public
2.3 非邏輯:某一行不包括...
------------------->$ git grep --not -e 'public' a.txt:ab a.txt:bc a.txt:void b.txt:void b.txt:aaa b.txt:bbb c.txt:kkkk c.txt:sfs c.txt:l
2.4 組合邏輯:與或非的組合(爲測試組合邏輯,又在庫中新添加了d.txt文件)
------------------->$ git grep -e 'public' --and \( -e 'void' -e 'return' \) d.txt:public void int save d.txt:public void string save d.txt:public return a ------------------->$ git grep -e 'public' --and \( -e 'void' --or -e 'return' \) d.txt:public void int save d.txt:public void string save d.txt:public return a ------------------->$ git grep -e 'public' --and \( -e 'void' --and -e 'int' \) d.txt:public void int save ------------------->$ git grep -e 'public' --and \( --not -e 'int' \) a.txt:public c.txt:public c.txt:public d.txt:public void string save d.txt:public return a
2.5 全匹配:某一文件既包含...又包含...
------------------->$ git grep --all-match -e 'public' -e 'void' a.txt:public a.txt:void d.txt:public void int save d.txt:public void string save d.txt:public return a
2.6 以上各個命令還能夠加‘-n'、’-c‘、’--name-only‘、版本、文件等限制
2.7 查找某個字符串在什麼時候添加
git log -S"string wanted to search" --oneline 81fbf7e a commit