如何使用Git查找第一次出现的一行(或一行的一部分)?

时间:2016-03-16 16:27:00

标签: git

假设我们在代码中看到一行:

a = foo.bar + xyz.abc + fn() * 3;

现在我们知道foo.bar是“错误”代码或导致某些问题的代码。并且git blame将显示该行是迈克尔。但是,迈克尔可能已签入该部分代码。他可能只改变了* 3部分。那么在这种情况下,我们怎样才能在回购中找到foo.bar的第一次出现,并找出谁写了它或者添加了?{/ p>

我想过使用

git show HEAD:path/to/file.js | grep 'foo.bar'

然后

git show HEAD~1:path/to/file.js | grep 'foo.bar'
git show HEAD~2:path/to/file.js | grep 'foo.bar'

并将2增加到34等,直到我看不到该行显示foo.bar

但如果数字可能很大,例如120343,该怎么办?有更好的方式或更快的方式吗?

2 个答案:

答案 0 :(得分:1)

你可以使用提交sha的责备继续指责更深层次,例如:

git blame -L65,+2 -- application.py
# the commit sha in the output is 4dd5a167
# 4dd5a167 (Boris Serebrov 2015-09-08 21:33:20 +0300 65)     except database.ItemNotFound:
# 74311d17 (Boris Serebrov 2015-11-12 11:16:50 +0200 66)         # no node - log error and create it

# continue blaming from the 4dd5a167's parent (4dd5a167^)
git blame -L65,+2 4dd5a167^ -- application.py

此功能在vim-fugitive vim插件中使用,通常非常有用。您可以执行:Gblame,然后按~至"重新责备"改变。 即使您不是vim用户,也值得尝试看看它是如何工作的。 Here是关于逃犯行为的一个很好的解释。

答案 1 :(得分:0)

我猜你正在尝试做的事情可以通过命令git-log和选项--grep-reflog来完成。

由于您已经知道您感兴趣的文件,我猜这个列表会很短。有一些选项使用得很好,我猜你想要的只需要git-log。

git-log Documentation page