git diff仅显示添加了特定单词的行

时间:2016-02-24 21:42:18

标签: git diff

我知道一个提交有问题的更改的提交。然而,提交是如此之大以至于它破坏了gitlab,而我目前还没有一个很好的工具来搜索大型提交中的特定差异。

在git中搜索引入或删除单词的 commit 非常简单,但是,我已经知道了提交,需要知道哪些文件/行受到影响。我怎么能这样做?

假设提交是sha abcdef1并且是当前分支/ HEAD的直接祖先。我想在此提交与之前的提交之间的差异中搜索字符串word

1 个答案:

答案 0 :(得分:1)

一个简单的近似值是git --color <log/diff/etc> -S <word> | ack --nocolor $'(^(?!\e\\[31m|\e\\[32m)|<word>)',它将使用颜色标记匹配仅显示包含该单词的更改行(但仍会显示更改标题)。它很适合过滤巨大的更改块,当你有大量更改的文件/块时不太好,而且大多数都不包含这个词,因为标题仍将显示给那些。您可以使用比ack / grep更强大的功能(如awk)来记住最后一个黄色块(提交ID),白色块(文件头)和青色块(更改块头),并仅在红色中找到该单词时显示它们/绿线,但会有点复杂。