我有兴趣在git中找到一个提交,通过识别最早提交但未包含它来删除一行。
我知道git blame --reverse
命令,但它显示最后一次提交,包括该行,这是不一样的。我尝试使用与git log --reverse --ancestry-path <commit shown by blame>..HEAD
结合使用来找到我需要的提交但取得了一些成功,但在某些情况下它变得单调乏味。
说我有以下图表
/----G---H---I
/ \ \ \
A----B---C---D---F--G
\ /
X
我知道A包含该行,但G不包含。实际删除它的提交是X.但是,如果我运行git blame --reverse A..G
,它会告诉我该行的最后一次提交是I.通过执行git log --reverse --ancestry-path I..G
,我将看到F是一个合并所以我需要通过运行git blame --reverse A..D
来深入挖掘,这将返回H.然后我会找到G,然后终于找到A,这将允许我找到X.
这不是一个不太可能的场景,当我们在相似的时间将大量拉取请求合并到主分支时,我遇到了这个问题,所有分支提交仍包含已删除的代码。
是否有一个命令会立即返回提交X?或者至少有更快的方法找到它?
答案 0 :(得分:1)
blockRenderMap
将为您提供所有可以更改文件中指定字符串出现次数(即添加/删除)的提交。
您还可以将该字符串视为具有git log -S"this is part of the line that is added or removed"
的正则表达式。