在搜索一个术语的Git差异时,我是否只能显示该术语所在的行?

时间:2017-03-21 20:18:34

标签: git

我正在进行一些CSS清理,并希望找到我们的代码中使用类的位置,以确保它实际上在我们的代码中使用,而不是在我们的CMS等中使用。

我们正在使用Git,因此我使用以下内容搜索包含我正在寻找的搜索字词的代码差异, scrollerWrapper

git log -GscrollerWrapper -p

使用-p标记我获取文件的实际更改,但在某些情况下,它会返回数千行的文件。理想情况下,我只想查看我正在搜索的术语所在的行(如果我能在行之前/之后看到 x 行,那就更好了。)

我已查看the documentation for git-log但我没有看到相关参数。

是否可以传递一些额外的参数来将diff限制为仅包含我的搜索词的行,或者运行一个不同的查询来执行此操作?

谢谢!

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用pager内置的搜索工具,这样可以让您滚动浏览git log的文字。

对于大多数寻呼机,请键入/,然后输入您要搜索的内容。因此,正常运行git log -GscrollerWrapper -p,然后键入/,然后键入scrollerWrapper。这将进入scrollerWrapper的第一次出现。点击n会转到下一个。

答案 1 :(得分:0)

您可以将git log输出管道传输到grep。在Windows上,您可以使用Git Bash执行此操作。 grep具有参数,用于指定为每个匹配的行提供多少上下文。

答案 2 :(得分:0)

一般来说,每当我需要搜索存储库时,我总是遵循古老的Gitk。幸运的是,如果您了解ps命令的方法,则可以在搜索时看到Gitk在后台运行的实际命令。 Gitk提供搜索功能,扫描存储库历史记录以添加/删除字符串(我相信这是您正在寻找的)。它实际在后台运行的命令是git diff-tree,这是一个非常复杂的命令,有大约470亿个选项。

无论如何,我认为git diff-tree -r -U3 -Ssearch_string <tree-ish search target>的某些内容对您有用。

  • -r以递归方式进行整个搜索
  • -U用于输出统一差异,其中3是上下文行数
  • -S用于实际搜索字符串。这种格式看起来很有趣,并且不要忘记你可能需要根据你要搜索的内容来逃避特殊字符
  • <tree-ish search target>您要搜索的。您可以放置​​当前HEADmaster或任何其他树型参考的提交哈希值。

如果您曾经在命令行上使用git生成统一差异,那么输出应该非常熟悉,并且看起来像:

$ git diff-tree -r -U3 -Sexisting_user 599479fc43401942cedef7187677fa222ec54c94
599479fc43401942cedef7187677fa222ec54c94
diff --git a/src/AppBundle/Controller/SubscriptionController.php b/src/AppBundle/Controller/SubscriptionController.php
index 3670973..55de07a 100644
--- a/src/AppBundle/Controller/SubscriptionController.php
+++ b/src/AppBundle/Controller/SubscriptionController.php
@@ -23,28 +23,17 @@ class SubscriptionController extends AbstractController
         $form->handleRequest($request);

         if ($form->isSubmitted() && $form->isValid()) {
-            $existing_user = $this->get('user_dao')->getUserByEmail($newly_invited_user->getEmail());
...

这应该可以为您提供所需的一切,提交参考号,行号和背景信息。