【问题标题】:vscode search for a text only in git changesvscode 仅在 git 更改中搜索文本
【发布时间】:2020-03-11 12:48:21
【问题描述】:

在发布分支之前,有时我想搜索一个特定的关键字,以确保我在任何地方都正确地修复了它。问题是,我只想在更改中搜索它,而不是在整个项目中搜索。

有可能吗?

【问题讨论】:

  • 您能否指定是否要使用 Git 源代码控制扩展程序,或者一般地使用它们中的任何一个?如果对于 Git,您也许可以尝试与 Git 扩展程序对话以查找已更改文件及其差异的列表,或者您可以在幕后使用 Git 命令行。如果您希望它适用于任何版本控制,我认为没有办法,因为 SCM 扩展名可以以任何自定义方式表示文件组。
  • 请让我们知道您是否可以接受命令行调用:我觉得这可以通过这些来完成。

标签: git visual-studio-code vscode-extensions


【解决方案1】:

正如AsGoodAsItGets 在其中一个 cmets 中指出的,在 VS Code github 上有一个待处理的 feature request 将允许我们这样做。

与此同时,我有一个解决方法:

  1. 关闭所有打开的文件
  2. 开源控制

  1. 右键单击Changes 并选择Open changed files。请注意,它还会打开已删除的文件。

  1. 转到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】:
  1. 使用View > Terminal 菜单选项键入^ 打开终端,或 运行View: Toggle Integrated Terminal 命令。
  2. 运行git diff BRANCH1..BRANCH2 -G REGEX。将BRANCH1 替换为要比较的分支,将BRANCH2 替换为当前分支,将REGEX 替换为您正在搜索的关键字的正则表达式。

如果您想在 VSCode 编辑器而不是集成终端中查看结果,请将 | code - 附加到 git diff 命令。

【讨论】:

    【解决方案4】:

    在“搜索”下有一个选项可让您包含/排除要搜索的文件。我希望这会有所帮助。

    【讨论】:

      【解决方案5】:

      从命令行:

      1. 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
      
      1. 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】:

        你不能。

        两种选择:

        1. Suggest 这是 VSCode 存储库中的一项功能。

        2. 在终端中使用以下命令在所有 暂存文件中搜索字符串

          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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-12
          • 2020-09-25
          • 1970-01-01
          • 2019-09-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-09
          相关资源
          最近更新 更多