git: 找出谁删除了文件的内容

易水最近在工作中发现有文件的内容不正确,有一行内容被删除了,但不知道是谁、因为什么原因删除的,所以想查找一下删除该行内容的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 命令进行查找,这条命令的参数是正则表达式,可以用来查找更为复杂的内容。

参考文档

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注