获取第一个在git

时间:2017-03-10 13:11:49

标签: git version-control

我有兴趣在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?或者至少有更快的方法找到它?

1 个答案:

答案 0 :(得分:1)

blockRenderMap将为您提供所有可以更改文件中指定字符串出现次数(即添加/删除)的提交。

您还可以将该字符串视为具有git log -S"this is part of the line that is added or removed"的正则表达式。