2009-10-06 31 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>说。