问题描述
在 Git 代码存储库中,我想列出包含某个单词的所有提交.我试过了
git log -p |grep --context=4 "word";
但它不一定会给我回文件名(除非它与我搜索的词相差不到五行.我也试过
git grep "word";
但它只给我当前文件而不是历史.
如何搜索整个历史记录,以便跟踪特定单词的变化?我打算在我的代码库中搜索出现的单词以追踪更改(在文件历史记录中搜索).
如果要查找 提交消息 包含给定单词的所有提交,请使用
$ git log --grep=word
如果你想找到所有提交到word"的地方在文件内容中添加或删除了(更准确地说:单词"出现次数改变的地方),即搜索提交内容,使用所谓的镐"搜索
$ git log -Sword
在现代 Git 中也有
$ git log -Gword
查找添加或删除的行与word"匹配的差异(也提交内容).
请注意,-G
默认接受正则表达式,而 -S
接受字符串,但可以使用 --pickaxe 修改以接受正则表达式-正则表达式
.
为了说明-S之间的区别;--pickaxe-regex
和 -G
,考虑在同一个文件中具有以下差异的提交:
+ 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 2.25.1(2020 年 2 月)中,文档围绕这些正则表达式进行了澄清.
请参阅 commit 9299f84(2020 年 2 月 6 日),作者 Martin Ågren (``).
diff-options.txt
:避免正则表达式"示例中的重载
当我们举例说明 -G
和 -S
之间的区别时(使用 --pickaxe-regex
),我们使用一个例子diff 和 git diff
调用涉及regexec"、";regexp"、regmatch"等
这个例子是正确的,但我们可以通过避免编写regex.*"来更容易地解开.除非确实需要说明我们的观点.
改用一些虚构的非正则词.
git diff 文档
现在包括:
为了说明
-S之间的区别;--pickaxe-regex
和 -G
,考虑在同一个文件中具有以下差异的提交:
+ return frotz(nitfol, two->ptr, 1, 0);
...- 命中 = frotz(nitfol, mf2.ptr, 1, 0);
虽然 git log -G"frotz(nitfol"
会显示这个提交,git log -S"frotz(nitfol" --pickaxe-regex
不会(因为该字符串的出现次数没有改变).
In a Git code repository I want to list all commits that contain a certain word. I tried this
git log -p | grep --context=4 "word"
but it does not necessarily give me back the filename (unless it's less that five lines away from the word I searched for. I also tried
git grep "word"
but it gives me only present files and not the history.
How do I search the entire history so I can follow changes on a particular word? I intend to search my codebase for occurrences of word to track down changes (search in files history).
If you want to find all commits where the commit message contains a given word, use
$ git log --grep=word
If you want to find all commits where "word" was added or removed in the file contents (to be more exact: where the number of occurrences of "word" changed), i.e., search the commit contents, use a so-called 'pickaxe' search with
$ git log -Sword
In modern Git there is also
$ git log -Gword
to look for differences whose added or removed line matches "word" (also commit contents).
Note that -G
by default accepts a regex, while -S
accepts a string, but it can be modified to accept regexes using the --pickaxe-regex
.
+ return !regexec(regexp, two->ptr, 1, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
With Git 2.25.1 (Feb. 2020), the documentation is clarified around those regexes.
See commit 9299f84 (06 Feb 2020) by Martin Ågren (``).
The git diff
documentation now includes:
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);
这篇关于如何 grep Git 提交某个单词的差异或内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!