How grep through your staged files prior to committing?

荒凉一梦 提交于 2019-12-21 07:59:09

问题


So prior to running git commit I often will run the following:

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

I thought it was similar to:

git diff --cached

(which will show you all the changes you are about to commit, ie. will show you the diff in your staged files).

Unfortunately, I just found that the --cached option for git grep simply tells git to "only" look at everything in its index.

So how can I run git grep and have it only grep through my staged files?

(Yes, I know I could simply do git diff --cached and search in that, but I would rather have the programmatic ability to grep through my staged files.)


回答1:


If you have a Unix-like shell available, the answer is pretty simple:

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

This will run git grep on the list of staged files.




回答2:


A lot of pre-commit hooks use git diff-index --cached -S<pat> REV to find changes which add or remove a particular pattern. So in your case, git diff-index --cached -Sdebugger HEAD. You may want to add -u to get a diff as well, otherwise it just identifies the offending file.




回答3:


First you need to get a list of files from the index (excluding deleted files). This can be done with the following:

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

Second you need to use the : prefix to access the contents of a file in the current index (staged but not yet committed) see gitrevisions manual for more information.

git show :<file>

Finally here's an example of putting it all together to grep this list of files

# 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

Also here's an example of a git pre-commit hook that uses this method to check that the copyright years are up to date in files to be committed.



来源:https://stackoverflow.com/questions/4102151/how-grep-through-your-staged-files-prior-to-committing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!