5

我想取回我前一段时间在某个提交中删除的一些代码。我根本不记得代码是什么,但我记得它做了一些非常有用的事情,但我删除了它,因为我认为我不需要它。但是,我现在需要返回该代码,但我只记得它在哪个函数中。

其他信息:包含该函数的文件还包含总共 500 行代码。有一个 30 次提交范围,我知道代码曾出现在某个时间点。

这个问题是一个高层次的问题。我如何使用我知道的信息来获得我想要的信息?

4

3 回答 3

3
  1. 您可以做的最好的事情是使用搜索关键字。如果你知道函数名

    git log -Sfunction
    

    将会是完美的。

  2. 如果您有一个模式,您可以在每个提交的更改中查找:

    git log --grep=pattern 
    

    将列出包含该模式的提交。添加-i不区分大小写的匹配。添加--regex正则表达式匹配

  3. 否则

    git log -p FIRST...LAST | less
    

    会给你全文。你可以搜索,或者只是滚动和视觉扫描......


哦。PS。既然你提到它是一个很长的功能,你可以这样做

    git log --stat FIRST...LAST

----并注意差异统计中包含许多删除 ( ) 的文件。

于 2012-10-10T22:37:02.737 回答
1

git blame与_

--reverse

让历史前进而不是倒退。这不是显示出现行的版本,而是显示存在行的最后一个版本。这需要一系列的修订,例如 START..END,其中责备路径存在于 START 中。

或者尝试git bisect在你的 30 次提交中进行二进制搜索,以找到感兴趣的代码出现的那个。

于 2012-10-10T22:08:31.530 回答
0

如果您能记住函数名称或任何其他重要的单词或变量,那么您可以尝试git grep

git grep <regexp> $(git rev-list <rev1>..<rev2>)

您的提交范围的限制在哪里rev1以及在哪里。rev2它会 grep 所有的提交内容(包括删除),所以你一定会找到你的代码。

有关更多详细信息,请参阅如何在 git 历史记录中 grep(搜索)已提交的代码?

于 2012-10-10T21:43:42.017 回答