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 -Ggit 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 更改中搜索文本的主要内容,如果未能解决你的问题,请参考以下文章

仅在具有特定前缀的文件中搜索 IntelliJ 中的文本

如何创建仅在主题行开头搜索文本的 Gmail 过滤器?

如何在 git log 中(使用 less)搜索单词边界

Ember 2,仅在一个计算属性中处理两个或多个属性。如何按搜索文本和类别进行过滤

在计算机上搜索所有未提交更改的 .git 文件夹

Flutter - 更改 SearchDelegate 的搜索提示文本