1. 背景
突然测试过来跟你说代码测试不pass,然后检查了相应发布的代码,会发现某段代码被删除了,但是又不知道是谁删除的,也不知道是怎么被删除的。这个时候就会想知道这段代码什么时候创建的,什么时候被删除的。甚至可能想不起来这代码为什么被删除。
其实这种情况更多的是出现在代码合并的时候,在进行多方合并的时候就有可能不小心合并出现了问题。这个时候又不知道是哪个commit id删除的,这样就很难定位出是哪个commit id出现的问题。这个时候就需要git log -S <string> --oneline
解决这个问题。
2. git log --oneline -S <string>
使用示例
有一个项目,里面仅有一个example.txt
的文件,第一次提交时添加了如下内容:
test1
test2
test3
test4
test5
第二次提交,添加了test6
,新的内容如下:
test1
test2
test3
test4
test5
test6
第三次提交,添加了test7
,新的内容如下:
test1
test2
test3
test4
test5
test6
test7
第四次提交,删除了test4
,新的内容如下:
test1
test2
test3
test5
test6
test7
查看提交的命令和结果:
$ git log --oneline
dc0be69 (HEAD -> master) delete test4
3f4cd9a add test7
c4db59e add test6
94e20d8 first commit
使用git log -S
查看哪次提交是关于test4
字符修改的:
$ git log --oneline -S "test4"
dc0be69 (HEAD -> master) delete test4
94e20d8 first commit
结果是符合预期的。
当然如果你确定在哪个文件修改的,那么也可以带上文件名
:
$ git log --oneline -S "test4" example.txt
dc0be69 (HEAD -> master) delete test4
94e20d8 first commit
注意:这里的-S
是大写字幕S