2009-10-06 26 views
43

這使我變得瘋狂。Git:查找刪除的代碼

如何查找被刪除的代碼?

我最終找到在那裏與此創建:

$ git log --pretty=oneline -S'some code' 

而且這是夠好,而且我也很想找到它刪除了,並且到目前爲止,沒有骰子。

首先,我試着git diff HEAD..HEAD^|grep 'some code',每次擴大範圍,直到我找到它被刪除的行。尼斯,所以假設我發現它的範圍是HEAD^^..HEAD^^^,那麼我的git show HEAD^^^git show HEAD^^grep,但代碼無處可查!

然後我就git bisect讀了一下,果然,它給了我一個修訂版本,其中的罪魁禍首應該是...同樣,git show rev|grep 'some code'出現空...

什麼?我究竟做錯了什麼?

謝謝!

+2

你是說,當你基本上做以下你沒有命中?:

 SHAHIT=\'git log --pretty=oneline -S'some code' | head -1 | awk '{ print $1 }'\' git show $SHAHIT | grep 'some code' 
如果是這樣,似乎無意義的....如果它在'log',它應該是在'可見顯示「......對嗎?或者,也許我誤解了這個問題。 – metasim 2010-04-16 20:16:07

+0

自從我處於這種情況之後已經有一段時間了,它並沒有再次出現,所以我無法測試你的命令。無論如何,它可能會派上用場。 – Ivan 2010-04-22 01:52:31

+1

舊帖子/評論在這裏,但正是我所需要的。 @SimeonFitch你的語法對我來說非常合適,可以找到並列出有問題的實際代碼行。另外,我發現有用的是使用'--context = n'grep選項來顯示足夠的行前/後知道文件名是什麼(還有其他grep選項,這也會有所幫助)。所以在我的情況下,第二個命令是:git show $ SHAHIT | grep --context = 30'一些代碼' – 2014-10-09 14:29:22

回答

32

哼,工作對我來說:

 
$ git init 
Initialized empty Git repository in /Users/pknotz/foo/.git/ 

$ echo "Hello" > a 

$ git add a 

$ git commit -am "initial commit" 
[master (root-commit) 7e52a51] initial commit 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 a 

$ echo " World" >> a 

$ git commit -am "Be more specific" 
[master 080e9fe] Be more specific 
1 files changed, 1 insertions(+), 0 deletions(-) 

$ echo "Hello" > a 

$ git commit -am "Be less specific" 
[master 00f3fd0] Be less specific 
1 files changed, 0 insertions(+), 1 deletions(-) 

$ cat a 
Hello 

$ git log -SWorld 
commit 00f3fd0134d0d54aafbb9d959666efc5fd492b4f 
Author: Pat Notz <[email protected]> 
Date: Tue Oct 6 17:20:48 2009 -0600 

    Be less specific 

commit 080e9fe84ff89aab9d9d51fb5d8d59e8f663ee7f 
Author: Pat Notz <[email protected]> 
Date: Tue Oct 6 17:20:33 2009 -0600 

    Be more specific 

或者說,這是不是你的意思?

+0

這就是我的意思...所以,如果它不適合我,可能是索引損壞或歷史被重寫? – Ivan 2009-10-06 23:52:08

+4

在這個例子中,Pat正在使用'git log -SWorld',它不*顯示差異。我猜(沒有嘗試過),如果最後一個命令是'git show 00f3fd0134d0d54aafbb9d959666efc5fd492b4f | grep World「,那麼你會得到你正在尋找的行爲。 – metasim 2010-04-16 20:24:30

0

如果您的存儲庫位於github.com上,它具有搜索的集成功能。 它在毫秒響應,並在刪除代碼太

+6

我無法在github.com上找到一種方法來搜索已刪除的代碼,只有當前的代碼......您能通過闡述或演示如何幫助我嗎? – pulkitsinghal 2015-09-02 15:58:05

17

git log -S<string>搜索做工作,但如果你需要更復雜的搜索,你可以使用git log -G<regex>

man

-G<regex>

查找差異,其補丁程序文本中包含添加/刪除的行 匹配<regex>說。