因此在运行之前 git commit 我经常会运行以下内容:

git grep --cached -l -I "debugger"

我认为这与:

git diff --cached

(这将向您展示您将要提交的所有更改,例如,将向您展示您分阶段文件中的差异)。

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

那我该如何运行 git grep 而且它只能通过我的分阶段文件进行操作吗?

(是的,我知道我可以简单地做 git diff --cached 并在其中进行搜索,但是我宁愿有程序化能力来浏览我的分阶段文件。)

有帮助吗?

解决方案

如果您有类似Unix的外壳,答案非常简单:

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

这将运行 git grep 在上演文件列表中。

其他提示

许多预先签名的挂钩使用 git diff-index --cached -S<pat> REV 找到添加或删除特定模式的更改。因此,就您而 git diff-index --cached -Sdebugger HEAD. 。您可能想添加 -u 要获得差异,否则它只会标识有问题的文件。

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

git diff --cached --name-only --diff-filter=d HEAD

第二,您需要使用:前缀来访问当前索引中的文件内容(上演但尚未提交) gitrevisision手册了解更多信息。

git show :<file>

最后,这是将所有内容放在一起以抓住此文件列表的示例

# Get a list of files in the index excluding deleted files
file_list=$(git diff --cached --name-only --diff-filter=d HEAD)

# for each file we found grep it's contents for 'some pattern'
for file in ${file_list}; do
    git show :"${file}" | grep 'some pattern'
done

这是一个例子 使用此方法来检查版权年是否最新的文件中,该方法在要投入的文件中是否最新。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top