0%

git log -S -G 根据内容变化查找

git log用的非常频繁,指定分支,指定文件等等
不过-G-S参数的差异没搞清楚,导致查找特定提交时废了不少时间

使用场景

查找包含特定字符的某处代码被修改的记录时,很合适,比如某个函数什么时候添加和修改的,等等

对比

-G是查正则的。查文本用-S,但-S可以使用–pickaxe-regex修改为接受正则表达式

To illustrate the difference between -S –pickaxe-regex and -G, consider a commit with the following diff in the same file:

1
2
3
+    return !regexec(regexp, two->ptr, 1, &regmatch, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, &regmatch, 0);

While git log -G”regexec(regexp” will show this commit, git log -S”regexec(regexp” –pickaxe-regex will not (because the number of occurrences of that string did not change).

-S

查找的结果,是匹配的 字符串出现的次数发生变化 的提交
比如,出现,被删除等
某次提交将abcdef,修改为abcd, 使用git log -Sabc将不会查找出此提交,使用git log -Sabcde可以查找出

-G

没有次数变化的限制,只要变化就会查找出对应的提交

当然,如果是要查找commit msg中包含特定信息的提交而非内容,则应使用git log --grep='穿山甲说的是'

参考链接

How to grep Git commit diffs or contents for a certain word?
Git - git-log Documentation
原文链接