我曾经删除过一个文件或文件中的一些代码。我可以在内容(而不是提交消息)中进行grep吗?

一个非常糟糕的解决方案是grep日志:

git log -p | grep <pattern>

然而,这不会立即返回提交哈希。我和吉特·格里普玩得不亦乐乎。


当前回答

所以,您是否正在尝试翻看旧版本的代码,以查看最后存在的内容?

如果我这样做的话,我可能会使用git平分。使用平分线,您可以指定已知的好版本、已知的坏版本,以及一个简单的脚本,该脚本可以检查版本是好还是坏(在本例中,一个grep可以查看您正在查找的代码是否存在)。运行此命令将发现代码何时被删除。

其他回答

为现有答案添加更多内容。如果您知道您可能制作的文件,请执行以下操作:

git log --follow -p -S 'search-string' <file-path>

--如下:列出文件的历史记录

所以,您是否正在尝试翻看旧版本的代码,以查看最后存在的内容?

如果我这样做的话,我可能会使用git平分。使用平分线,您可以指定已知的好版本、已知的坏版本,以及一个简单的脚本,该脚本可以检查版本是好还是坏(在本例中,一个grep可以查看您正在查找的代码是否存在)。运行此命令将发现代码何时被删除。

在git历史记录中搜索的命令

git log -S"alter" --author="authorname" --since=2021.1.1 --until=2023.1.1 -- .

gitlog可以是搜索所有分支中文本的更有效的方法,特别是如果有很多匹配项,并且您希望首先看到最近的(相关的)更改。

git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'

这些日志命令列出了添加或删除给定搜索字符串/regex的提交,(通常)是最新的。-p选项会导致相关的diff显示在添加或删除模式的位置,因此您可以在上下文中看到它。

找到了添加您要查找的文本的相关提交(例如,8beeff00d)后,找到包含该提交的分支:

git branch -a --contains 8beeff00d

在任何版本、任何文件(Unix/Linux)中搜索:

git rev-list --all | xargs git grep <regexp>

仅在某些给定文件中搜索,例如XML文件:

git rev-list --all | xargs -I{} git grep <regexp> {} -- "*.xml"

结果行应如下所示:6988bec26b1503d45eb0b2e8a4364afb87dde7af:bla.xml:找到的行的文本。。。

然后,您可以使用gitshow获取更多信息,如作者、日期和差异:

git show 6988bec26b1503d45eb0b2e8a4364afb87dde7af