我曾经删除过一个文件或文件中的一些代码。我可以在内容(而不是提交消息)中进行grep吗?
一个非常糟糕的解决方案是grep日志:
git log -p | grep <pattern>
然而,这不会立即返回提交哈希。我和吉特·格里普玩得不亦乐乎。
我曾经删除过一个文件或文件中的一些代码。我可以在内容(而不是提交消息)中进行grep吗?
一个非常糟糕的解决方案是grep日志:
git log -p | grep <pattern>
然而,这不会立即返回提交哈希。我和吉特·格里普玩得不亦乐乎。
当前回答
我接受了Jeet的答案,并将其改编为Windows(多亏了这个答案):
FOR /F %x IN ('"git rev-list --all"') DO @git grep <regex> %x > out.txt
注意,对于我来说,出于某种原因,删除这个正则表达式的实际提交并没有出现在命令的输出中,而是出现在它之前的一次提交。
其他回答
每当我找到你的位置时,我都会使用以下命令行:
git log -S "<words/phrases i am trying to find>" --all --oneline --graph
说明:
gitlog-我需要在这里写更多;它按时间顺序显示日志。-S“<单词/短语我试图查找>”-它显示了所有Git提交,其中任何文件(添加/修改/删除)都包含我试图查找的单词/短语,但没有“<>”符号。--all-在所有分支中强制执行和搜索。--oneline-它将Git日志压缩为一行。--graph-它创建按时间顺序提交的图形。
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
我在这里有点惊讶,也许我错过了我正在寻找的答案,但我来到这里是为了寻找所有树枝的顶端。并不是针对存储库中的每一个修订,所以对我来说,使用git-rev列表——所有信息都太多了。
换句话说,对我来说,最有用的变化是
git grep -i searchString $(git branch -r)
or
git branch -r | xargs git grep -i searchString
or
git branch -r | xargs -n1 -i{} git grep -i searchString {}
当然,您可以在这里尝试正则表达式方法。这里的方法很酷的是,它直接针对远程分支。我不必在这些分支机构中的任何一家进行检查。
git rev-list --all | xargs -n 5 git grep EXPRESSION
是对Jeet解决方案的一个调整,因此它在搜索时显示结果,而不仅仅是在最后(在大型存储库中可能需要很长时间)。
为了简单起见,我建议使用GUI:gitk——Git存储库浏览器。它很灵活
要搜索代码:要搜索文件,请执行以下操作:当然,它还支持正则表达式:
您可以使用向上/向下箭头浏览结果。