2017-03-10 54 views
0

我有興趣在git中找到一個提交,通過標識刪除了一行,其中最早的提交沒有包含它獲取第一次提交,其中沒有包含在git中的行

我知道git blame --reverse命令,但它顯示了最後一次提交包括這一行,它不一樣。我試着用它與git log --reverse --ancestry-path <commit shown by blame>..HEAD相結合來找到我需要的提交併取得了一些成功,但在某些情況下它變得乏味。

說我有下面的圖

/----G---H---I 
/ \ \ \ 
A----B---C---D---F--G 
    \/
    X 

我知道,一個包含線,但G不。實際上刪除它的提交是X.但是,如果我運行git blame --reverse A..G,它會告訴我該行最後一次提交是I.通過執行git log --reverse --ancestry-path I..G,我將看到F是合併,因此我需要深入挖掘運行git blame --reverse A..D,這將返回H.然後我會找到G,只有最後A,這將允許我找到X.

這不是一個不太可能的情況,當我們有很多拉請求在相似的時間合併到主分支中,所有分支的提交仍包含已刪除的代碼。

是否有命令會立即返回提交X?或者至少有更快的方法找到它?

+0

可能重複[如何「git責備」刪除的行?](http://stackoverflow.com/questions/4404444/how-do-i-git-blame-a-deleted-line) – smarber

回答

1

git log -S"this is part of the line that is added or removed"將爲您提供更改文件中指定字符串出現次數(即添加/刪除)的所有提交。

您還可以將該字符串視爲--pickaxe-regex的正則表達式。