vscode 仅在 git 更改中搜索文本
Posted
技术标签:
【中文标题】vscode 仅在 git 更改中搜索文本【英文标题】:vscode search for a text only in git changes 【发布时间】:2020-03-11 12:48:21 【问题描述】:在发布分支之前,有时我想搜索一个特定的关键字,以确保我在任何地方都正确地修复了它。问题是,我只想在更改中搜索它,而不是在整个项目中搜索。
有可能吗?
【问题讨论】:
您能否指定是否要使用 Git 源代码控制扩展程序,或者一般地使用它们中的任何一个?如果对于 Git,您也许可以尝试与 Git 扩展程序对话以查找已更改文件及其差异的列表,或者您可以在幕后使用 Git 命令行。如果您希望它适用于任何版本控制,我认为没有办法,因为 SCM 扩展名可以以任何自定义方式表示文件组。 请让我们知道您是否可以接受命令行调用:我觉得这可以通过这些来完成。 【参考方案1】:正如AsGoodAsItGets 在其中一个 cmets 中指出的,在 VS Code github 上有一个待处理的 feature request 将允许我们这样做。
与此同时,我有一个解决方法:
-
关闭所有打开的文件
开源控制
-
右键单击
Changes
并选择Open changed files
。请注意,它还会打开已删除的文件。
-
转到
Search
并选择Search only in Open Editors
不理想,但这就是我搜索 console.log 剩菜的方式;)
【讨论】:
这不会打开所有更改的文件,它似乎对打开文件的数量有硬限制 @Danielo515 你尝试打开多少? 113,它像 20 一样打开 @Danielo515 我刚刚尝试打开 247,它为我打开了 247。也许你改变了一些设置或者没有足够的内存......不管是什么我只是想说这不是一个“硬”限制,因为我可以打开很多。【参考方案2】:请参阅这些屏幕截图。您可以轻松地在打开的文件中搜索。
您也可以使用文件来包含功能
如果您想查找 commit message 包含给定单词的所有历史提交,请使用
$ git log --grep=word
如果您想查找在文件内容中添加或删除“word”的所有提交(更准确地说:“word”的出现次数发生了变化),即搜索提交内容,使用所谓的“pickaxe”搜索
$ git log -Sword
在现代 git 中也有
$ git log -Gword
查找添加或删除的行与“单词”匹配的差异(也提交内容)。
注意-G
默认接受正则表达式,而-S
接受字符串,但可以使用--pickaxe-regex
修改为接受正则表达式。
【讨论】:
如何在 vscode 的第一个屏幕截图中获得搜索对话框?包含“搜索”标签/输入的那个?我只能得到“要包含的文件”和“要排除的文件”的那个。 我刚刚注意到这还没有实现,所以我假设你从这里得到了截图? github.com/microsoft/vscode/issues/20530【参考方案3】:-
使用
View > Terminal
菜单选项键入^
打开终端,或
运行View: Toggle Integrated Terminal
命令。
运行git diff BRANCH1..BRANCH2 -G REGEX
。将BRANCH1
替换为要比较的分支,将BRANCH2
替换为当前分支,将REGEX
替换为您正在搜索的关键字的正则表达式。
如果您想在 VSCode 编辑器而不是集成终端中查看结果,请将 | code -
附加到 git diff
命令。
【讨论】:
【参考方案4】:在“搜索”下有一个选项可让您包含/排除要搜索的文件。我希望这会有所帮助。
【讨论】:
【参考方案5】:从命令行:
git grep "pattern"
将在跟踪文件中查找 pattern
。
请注意,它将搜索已搜索文件的完整内容,而不仅仅是差异部分(git diff -G
或 git log -G
,正如 @NickMcCurdy 和 @KunalVohra 所建议的那样)。
如果您指定提交引用,它将查看存储在该提交中的版本,例如:
# this will look into the files as they are on disk (working tree) :
git grep "pattern"
# this will look into files as stored in the last commit :
git grep "pattern" HEAD
git diff --name-only
将列出两次目标提交之间修改的文件
将两者结合起来:
git grep "pattern" HEAD -- $(git diff --name-only HEAD^ HEAD)
您可以搜索pattern
,只查看上次提交修改的文件。
您可以添加-i
进行不区分大小写的搜索:git grep -i "pattern"
;
如果您想查看自提交 eacf32
以来更改的文件:
# change the file listing part to :
$(git diff --name-only eacf32 HEAD)
如果你想搜索“自分支分支主分支后被修改”的文件:
$(git diff --name-only master...HEAD) # that's 3 dots
我不知道允许您运行git grep
的 vscode 扩展,您可以从在 VSCode 中打开的 bash 终端运行上述命令。
正如@NickMcCurdy 建议的那样:您可以在此命令末尾添加| code -
以在vscode 编辑器中打开结果。
【讨论】:
【参考方案6】:你不能。
两种选择:
Suggest 这是 VSCode 存储库中的一项功能。
在终端中使用以下命令在所有 暂存文件中搜索字符串。
git grep --cached "myString" $(git diff --cached --name-only)
提示:如果是 #2,则制作一个脚本并将其放入 .bashrc 中!
~/scripts/search.sh
run()
git grep --cached "$@" $(git diff --cached --name-only)
~/.bashrc
# Script to search after string in all staged files.
alias search="~/scripts/search.sh"
$ search test
【讨论】:
以上是关于vscode 仅在 git 更改中搜索文本的主要内容,如果未能解决你的问题,请参考以下文章