在提交之前,如何通过您的分阶段文件进行搜索?
-
29-09-2019 - |
题
因此在运行之前 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
还 这是一个例子 使用此方法来检查版权年是否最新的文件中,该方法在要投入的文件中是否最新。
不隶属于 StackOverflow