我想取回我前一段时间在某个提交中删除的一些代码。我根本不记得代码是什么,但我记得它做了一些非常有用的事情,但我删除了它,因为我认为我不需要它。但是,我现在需要返回该代码,但我只记得它在哪个函数中。
其他信息:包含该函数的文件还包含总共 500 行代码。有一个 30 次提交范围,我知道代码曾出现在某个时间点。
这个问题是一个高层次的问题。我如何使用我知道的信息来获得我想要的信息?
我想取回我前一段时间在某个提交中删除的一些代码。我根本不记得代码是什么,但我记得它做了一些非常有用的事情,但我删除了它,因为我认为我不需要它。但是,我现在需要返回该代码,但我只记得它在哪个函数中。
其他信息:包含该函数的文件还包含总共 500 行代码。有一个 30 次提交范围,我知道代码曾出现在某个时间点。
这个问题是一个高层次的问题。我如何使用我知道的信息来获得我想要的信息?
您可以做的最好的事情是使用搜索关键字。如果你知道函数名
git log -Sfunction
将会是完美的。
如果您有一个模式,您可以在每个提交的更改中查找:
git log --grep=pattern
将列出包含该模式的提交。添加-i
不区分大小写的匹配。添加--regex
正则表达式匹配
否则
git log -p FIRST...LAST | less
会给你全文。你可以搜索,或者只是滚动和视觉扫描......
哦。PS。既然你提到它是一个很长的功能,你可以这样做
git log --stat FIRST...LAST
----
并注意差异统计中包含许多删除 ( ) 的文件。
git blame
与_
--reverse
让历史前进而不是倒退。这不是显示出现行的版本,而是显示存在行的最后一个版本。这需要一系列的修订,例如 START..END,其中责备路径存在于 START 中。
或者尝试git bisect
在你的 30 次提交中进行二进制搜索,以找到感兴趣的代码出现的那个。
如果您能记住函数名称或任何其他重要的单词或变量,那么您可以尝试git grep
git grep <regexp> $(git rev-list <rev1>..<rev2>)
您的提交范围的限制在哪里rev1
以及在哪里。rev2
它会 grep 所有的提交内容(包括删除),所以你一定会找到你的代码。
有关更多详细信息,请参阅如何在 git 历史记录中 grep(搜索)已提交的代码?