2016-02-24 42 views
0

我知道引入了有问题的更改的提交。然而,提交是如此之大,以至于打破了gitlab,而我目前没有一个好的工具来搜索大提交中的特定差异。git diff仅显示添加了特定单词的行

Git中搜索一个提交,介绍或删除一个字是很简单的,但是,我已经知道了承诺,并且需要,而不是其确切文件/受灾线就知道了。我怎样才能做到这一点?

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

+0

你在找'git show'吗? –

+0

我想通了,这里有中途:'git diff abcdef1^abcdef1 -Sword --diff-filter-M',但不显示只是改变的行。对于我的目的来说,这确实没问题,但其他人可能希望按照要求查看问题的答案。 – ErikE

回答

1

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