在Git代码库中,我想列出包含某个单词的所有提交。我想这如何grep Git为某个单词提交差异或内容?
git log -p | grep --context=4 "word"
,但它并不一定给我回的文件名(除非它是小于5条 线从我搜索这个词了。我也试过
git grep "word"
,但它给了我只显示文件而不显示历史记录
如何搜索整个历史记录以便我可以关注特定单词的变化?我的意思是搜索我的代码库以查找单词的出现情况以追踪更改(在文件历史记录中搜索)。
在Git代码库中,我想列出包含某个单词的所有提交。我想这如何grep Git为某个单词提交差异或内容?
git log -p | grep --context=4 "word"
,但它并不一定给我回的文件名(除非它是小于5条 线从我搜索这个词了。我也试过
git grep "word"
,但它给了我只显示文件而不显示历史记录
如何搜索整个历史记录以便我可以关注特定单词的变化?我的意思是搜索我的代码库以查找单词的出现情况以追踪更改(在文件历史记录中搜索)。
如果你想找到所有提交哪里提交信息包含给定词,使用
$ git log --grep=word
如果你想发现其中添加或移除“字”在文件内容所有提交(更精确地说:这里的“字”改为OCCURENCES数),即搜索提交内容,使用所谓的“鹤嘴锄”与
$ git log -Sword
搜索在现代混帐还有
$ git log -Gword
寻找差异其添加或删除线相匹配“字”(也提交内容)。
请注意,默认情况下,-G
接受正则表达式,而-S
接受字符串,但可以修改为使用--pickaxe-regex
接受正则表达式。
为了说明
-S<regex> --pickaxe-regex
和-G<regex>
之间的区别,可以考虑在同一个文件中的以下DIFF提交:+ return !regexec(regexp, two->ptr, 1, ®match, 0); ... - hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
虽然
git log -G"regexec\(regexp"
将显示此承诺,git log -S"regexec\(regexp" --pickaxe-regex
不会(因为出现的次数的字符串没有改变)。
git log
的鹤嘴锄会发现提交与变化,包括‘字’与git log -Sword
这并不完全准确。 -S
虽然这通常是正确的答案,但我只是为了鼓励其他人阅读此答案而低估了它(http://stackoverflow.com/a/1340245/ 586983)有3种不同的方式,并解释他们的微妙之处。 – jakeonrails 2016-01-07 19:18:42
gosh!我认为这不是一个很好的理由来降低正确的答案......你不确定包括评论中的链接是否足够鼓励? – Deborah 2016-06-24 04:53:09
要在正则表达式使用布尔连接器:
git log --grep '[0-9]*\|[a-z]*'
这个正则表达式搜索正则表达式[0-9] *或[A-Z] *上提交消息。
vim-fugitive是多才多艺的那种Vim中检查的。
使用:Ggrep
做到这一点。欲了解更多信息,你可以安装vim-fugitive,并通过:help Grep
查找turorial。而这一集:exploring-the-history-of-a-git-repository将指导你做所有这些。
另一种方式/语法来做到这一点是:git log -S "word"
这样你就可以搜索例如git log -S "with whitespaces and stuff @/#ü !"
大量实验后,我可以推荐以下,这表明,引入或删除包含行提交一个给定的正则表达式,并显示每个文本的变化,颜色显示单词添加和删除。
git log --pickaxe-regex -p --color-words -S "<regexp to search for>"
需要一段时间来,虽然运行... ;-)
你可以试试下面的命令:
git log --patch --color=always | less +/searching_string
或以下列方式使用grep
:
git rev-list --all | GIT_PAGER=cat xargs git grep 'search_string'
在您想要搜索的父目录中运行此命令。
我喜欢这种方法,因为我看到的提交有数百行无关的更改,而我只对涉及我正在搜索的单词的实际修补程序感兴趣。要使用'git log --patch --color = always |少加+/searching_string'。 – 2016-10-16 19:17:50
'git log -S字'也适用于第二种情况 – 2013-02-07 16:55:54
* -S- *和* -G *在'man git log'中很不清楚。我必须阅读和实验三次才能发现差异。 –
2013-10-01 14:06:13
@TankorSmash'-S'寻找引入或移除实例的差异。 '-G '寻找添加或删除的行与给定的匹配的差异。 –
2013-11-04 20:19:42