易水最近在工作中发现有文件的内容不正确,有一行内容被删除了,但不知道是谁、因为什么原因删除的,所以想查找一下删除该行内容的commit SHA1。不过由于这行内容已被删除,因此无法使用 git blame
查出commit号。在网上搜了一下,这种情况下可以用 git log -S
找到对应的提交号,具体用法见下。
假设在文件 ./README
中,有人删除了一行,而这行内容中包含字符串 Who delete this line
,那么就可以用下面的命令找到对应的commit:
git log -S "Who delete this line" ./README
输出如下:
commit 7f77ef68c00fc7c0c6cbe4c06614843bb1caf921 (HEAD -> master)
Author: Easwy <easwy@easwy.com>
Date: Tue Nov 9 18:31:52 2021 +0800
update README to delete one line
commit 2f50750d4597df244fe58099257dd287de62f4e2
Author: Easwy <easwy@easwy.com>
Date: Tue Nov 9 18:31:28 2021 +0800
add README
这条命令把 ./README
文件中涉及到 Who delete this line
内容的commits都列出来,此时再用 git show
就可以轻松找出是哪个commit删除了该行。
与 git log -S
类似,你也可以使用 git log -G
命令进行查找,这条命令的参数是正则表达式,可以用来查找更为复杂的内容。