如何在git中找到“丢失”的代码

时间:2010-11-22 16:18:32

标签: git version-control

曾几何时,一个坏人通过我们的GIT仓库从源代码中删除了一个常量。

到目前为止,没有人注意到这一点......直到现在。

但是我想弄清楚这个常数在哪个提交中消失了,坏人是谁。

我只知道FOOBAR的常量名称。

更好的方法是git blame --reverse

2 个答案:

答案 0 :(得分:16)

这将列出从任何文件添加或删除字符串FOOBAR的所有提交:

git log --all -p -SFOOBAR

答案 1 :(得分:0)

git log -- path/to/file/with/constant这样的{p> git log应该可以获得所有曾经触及该文件的提交。如果文件没有经常更改,并且您的团队习惯于编写好的提交消息,那么这应该让您开始。

一旦你发现修改版本消失了,那么请你的罪犯。

如果文件确实发生很大变化,另一个选项是git bisect来搜索使用二进制搜索模式的违规提交。有点像:

$ git bisect start
$ git bisect bad
$ git bisect good <known-good-rev>
$ fgrep -Hn "FOOBAR" file
# Ah it is good!
$ git bisect good
$ fgrep -Hn "FOOBAR" file
# Ah it is bad!
$ git bisect bad

继续按照说明操作,直到找到引入错误的修订版。请阅读man page以获取更详细的说明。另一个很好的阅读资源是relevant section of Pro Git

祝你好运。