在提交之前如何通过您的暂存文件进行grep?

ste*_*eve 11 git grep commit git-commit

所以在运行之前git commit我经常运行以下内容:

git grep --cached -l -I "debugger"
Run Code Online (Sandbox Code Playgroud)

我认为它类似于:

git diff --cached
Run Code Online (Sandbox Code Playgroud)

(它将显示您即将提交的所有更改,即将显示您的暂存文件中的差异).

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

那么我怎样才能运行git grep并让它只通过我的分阶段文件?

(是的,我知道我可以简单地进行git diff --cached搜索,但我宁愿拥有编程能力来浏览我的分段文件.)

Ben*_*son 12

许多预提交钩子用于git diff-index --cached -S<pat> REV查找添加或删除特定模式的更改.所以在你的情况下,git diff-index --cached -Sdebugger HEAD.您可能还想添加-u以获取差异,否则它只会识别有问题的文件.

  • `-S`选项采用固定字符串,而不是正则表达式.(我不确定你的意思是"pat".)但是,git diffcore最近获得了`-G <regex>`选项,它应该让你做任何你想用`git grep`做的事情.它还没有发布的版本,但是在`git.git`主分支上. (4认同)
  • 好的,这让我接近我需要的东西,但不是100%那里.如果添加或删除了-S <string>,这将为您提供正匹配.如果*添加*我只想要一个匹配返回.有没有办法做到这一点? (3认同)

Mar*_*kus 7

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

git grep --cached "debugger" $(git diff --cached --name-only)
Run Code Online (Sandbox Code Playgroud)

git grep这将在暂存文件列表上运行。