我误解了怎么git grep --cached foo运作?运行git版本1.6.4.4或1.6.5.2,git grep --cached foo返回完全相同的东西git grep foo.
我认为它会起作用git diff --cached,只搜索临时区域的变化.这肯定是手册让我相信的:
Run Code Online (Sandbox Code Playgroud)git diff [--options] --cached [<commit>] [--] [<path>…]此表单用于查看您为下次提交相对于命名而进行的更改
<commit>.通常,您希望与最新提交进行比较,因此如果您不提供<commit>,则默认为HEAD.如果HEAD不存在(例如,未出生的分支)并且<commit>未给出,则显示所有阶段性变化.--staged是一个同义词--cached.
这只是一个错误,还是有一种替代的/更好的方法来查找提交foo的更改?
git diff --cached | grep foo
Run Code Online (Sandbox Code Playgroud)
上面的命令给了我想要的一半,但它丢失了更改出现在哪个文件的上下文.
UPDATE
对于--cached正在查看的内容,我似乎有一个概念错误.假设应用了暂存区域,它看起来正在搜索树的状态.这是有道理的,现在我考虑一下.我想要搜索的是差异,而不是完整的树.
具体来说,我想知道我将要提交的所有文件的列表(我不关心行号或上下文)SpecialLog(...),所以我可以编辑这些文件并删除SpecialLog.所以,是的,我可以git diff --cached在寻呼机中进行搜索SpecialLog,但是对于单个文件中的大量更改,有很多重复项,并且我看到的文件并不明显.
$ git init
Initialized empty Git repository in /tmp/foo/.git/
$ echo hi there >file
$ git add file
$ git commit -m 'added file'
[master (root-commit) dc08993] added file
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 file
$ echo hi again >>file
$ git grep again
file:hi again
$ git grep --cached again
$
Run Code Online (Sandbox Code Playgroud)
时间流逝...
$ git add file
$ git grep --cached again
file:hi again
Run Code Online (Sandbox Code Playgroud)
要将搜索范围限制为下一个提交的内容,请将git diff其输出通过管道传递给$PAGER.假设您已将寻呼机设置为less,则git diff --cached在上下文中显示搜索匹配.
在索引中搜索具有提及特殊字符串的更改的文件,如以下示例所示:
$ echo SpecialLog >file2
$ git add file2
$ git diff-index --cached --name-only HEAD
file
file2
$ git diff-index --cached -SSpecialLog --name-only HEAD
file2
$ git diff --cached -SSpecialLog --name-only
file2
Run Code Online (Sandbox Code Playgroud)