今天下午同事找到我,说有个锅要我背一下,在vsc的gitLens
看到某个文件里面的某行代码是我写的。
但是我有印象这些代码是我复制过来的,大概的场景是这样:
先有个a文件,写了某些代码,后面发现说a文件的某些代码应该归到b文件里面,所以就把这块代码移过去,这时候整个仓库就只有b文件出现这些代码,看文件历史的时候就会觉得这些代码是我写的…
这时候我们就需要找一下这些代码是从哪里copy过来的
git blamegit blame [<options>] <file>
可以查看某文件的每一行是什么时候谁修改的,类似 vsc的gitLens FILE HISTORY
这个命令可以加个 -C 的选项,Git 会分析你正在标注的文件, 并且尝试找出文件中从别的地方复制过来的代码片段的原始出处。
不过这个功能我没试过是有用的…比如这次就没有提示说这行代码是从哪里复制过来的
这时候我们就要用git的另一个搜索工具 git log
git log -S Text
可以查看Text出现在哪些commit中,这就很有用了。
直接 git log -S "userName = 'jsonz1993'"
查看发现在之前a同事提交过
1 | git log -S "userName = 'jsonz1993'" |
切换到 ee7f357f
再查看文件历史,确保没有丢错锅
1 | git checkout ee7f357f; git blame a.js |
查看之后发现这个文件只有a同事改过…成功甩锅