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,谢谢您的更正。我从未注意到这种差异,因为我的暂存文件通常与工作树中的文件相同。