Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 在提交之前,grep如何浏览您的暂存文件?_Git_Grep_Commit_Git Commit - Fatal编程技术网

Git 在提交之前,grep如何浏览您的暂存文件?

Git 在提交之前,grep如何浏览您的暂存文件?,git,grep,commit,git-commit,Git,Grep,Commit,Git Commit,因此,在运行git commit之前,我通常会运行以下操作: git grep --cached -l -I "debugger" git diff --cached --name-only --diff-filter=d HEAD 我认为它类似于: git diff --cached (这将向您显示您将要提交的所有更改,即将向您显示暂存文件中的差异) 不幸的是,我刚刚发现git grep的--cached选项只是告诉git“仅”查看其索引中的所有内容 那么,我怎样才能运行git grep

因此,在运行
git commit
之前,我通常会运行以下操作:

git grep --cached -l -I "debugger"
git diff --cached --name-only --diff-filter=d HEAD
我认为它类似于:

git diff --cached
(这将向您显示您将要提交的所有更改,即将向您显示暂存文件中的差异)

不幸的是,我刚刚发现
git grep
--cached
选项只是告诉git“仅”查看其索引中的所有内容

那么,我怎样才能运行
git grep
,让它只通过我的暂存文件执行grep呢


(是的,我知道我可以简单地执行
git diff--cached
并在其中进行搜索,但我更希望有编程能力通过我的暂存文件进行grep。)

许多预提交挂钩使用
git diff index--cached-S REV
来查找添加或删除特定模式的更改。所以在您的例子中,
git diff index--cached-Sdebugger HEAD
。您可能需要添加
-u
以获得差异,否则它只会识别出有问题的文件。

首先,您需要从索引中获取文件列表(不包括已删除的文件)。 这可以通过以下方式完成:

git grep --cached -l -I "debugger"
git diff --cached --name-only --diff-filter=d HEAD
其次,您需要使用:前缀来访问 当前索引(已暂存但尚未提交)请参阅 了解更多信息

git show :<file>

还有一个git pre-commit钩子,它使用此方法检查要提交的文件中的版权年份是否最新。

如果您有一个类似Unix的shell,答案非常简单:

git grep --cached "debugger" $(git diff --cached --name-only)

这将在暂存文件列表上运行
git grep
-S
选项采用固定字符串,而不是正则表达式。(我不知道你说的“pat”是什么意思。)然而,git diffcore最近获得了
-G
选项,它应该允许你用
git grep
做任何你想做的事情。它还没有发布版本,但是在
git.git
master分支上。好的,这让我接近我需要的,但不是100%。如果您的-S被添加或删除,这将为您提供一个正匹配。如果添加了匹配项,我只希望返回匹配项。有办法吗?那么,你解决了这个问题吗?我对答案很感兴趣。这个答案很好,除了
git grep
还需要
--cached
选项。否则,grep将在文件的磁盘版本上执行,而不是在文件的暂存版本上执行。@tanager True,谢谢您的更正。我从未注意到这种差异,因为我的暂存文件通常与工作树中的文件相同。