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.)
If you have a Unix-like shell available, the answer is pretty simple:
This will run
git grep
on the list of staged files.First you need to get a list of files from the index (excluding deleted files). This can be done with the following:
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.
Finally here's an example of putting it all together to grep this list of files
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.
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.