Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在git';s暂存区域和所有已更改但未暂存的文件_Git - Fatal编程技术网

在git';s暂存区域和所有已更改但未暂存的文件

在git';s暂存区域和所有已更改但未暂存的文件,git,Git,我试图在本地更改的所有文件中搜索字符串(例如,搜索字符串“TODO”)。其中包括已暂存的文件和已更改但尚未添加到暂存区域的文件。下面是一个在Debian上运行的bash代码段,可以实现这一点: for file in `git status -s -uno` do if [[ ! $file =~ [A-Z] ]]; then echo "$file"

我试图在本地更改的所有文件中搜索字符串(例如,搜索字符串“TODO”)。其中包括已暂存的文件和已更改但尚未添加到暂存区域的文件。

下面是一个在Debian上运行的bash代码段,可以实现这一点:

for file in `git status -s -uno`
        do
                if [[ ! $file =~ [A-Z] ]]; then
                        echo "$file"
                        grep -n "TODO" $file
                fi
        done
说明:

git status-s-uno
是git status的缩写形式,但不包括未跟踪的文件

for循环中的if条件跳过git status-s的status部分,以避免搜索不存在的文件

最后,grep的-n选项打印行号。只需将TODO更改为您想要查找的任何内容


我想它也应该在windows中的git bash上工作…

回答我自己的问题。我可以用下面的命令来做

git diff --name-only | xargs grep 'My search string goes here'

正确的答案是

git diff index-S{STRINGTOSEARCH}-u HEAD

新添加的文件必须通过

git添加路径/to/filename


仅在添加/删除的字符串中搜索所需字符串。

使用for循环将git状态的结果导入grep?
git grep TODO
?(请注意,这从工作目录开始,添加
-->://
以从存储库顶部开始。)但这也会查看未修改的文件。是的,但git grep也会搜索当前工作目录中未更改的文件。这不会找到暂存的更改,对吗?对于您想要的暂存和未暂存更改
git diff HEAD
这将显示已更改的文件并在该文件中搜索字符串,但如何仅搜索更改、添加和删除的字符串
git diff index--cached-S{STRINGTOSEARCH}-u HEAD
它至少需要通过
git add path/to添加到git的文件