假设我们在代码中看到一行:
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
增加到3
,4
等,直到我看不到该行显示foo.bar
。
但如果数字可能很大,例如120
或343
,该怎么办?有更好的方式或更快的方式吗?
答案 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。