2016-02-24 79 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),白色塊(文件頭)和青色塊(更改塊頭),並且只有在找到紅色字時纔會顯示它們/綠線,但它會更復雜一點。