我曾经删除过一个文件或文件中的一些代码。我可以在内容(而不是提交消息)中进行grep吗?
一个非常糟糕的解决方案是grep日志:
git log -p | grep <pattern>
然而,这不会立即返回提交哈希。我和吉特·格里普玩得不亦乐乎。
我曾经删除过一个文件或文件中的一些代码。我可以在内容(而不是提交消息)中进行grep吗?
一个非常糟糕的解决方案是grep日志:
git log -p | grep <pattern>
然而,这不会立即返回提交哈希。我和吉特·格里普玩得不亦乐乎。
当前回答
对于其他试图在Sourcetree中执行此操作的用户,UI中没有直接命令(从1.6.21.0版起)。但是,您可以通过打开终端窗口(主工具栏中可用的按钮)并将其复制/粘贴到其中来使用接受答案中指定的命令。
注意:Sourcetree的“搜索”视图可以部分为您进行文本搜索。按Ctrl+3转到“搜索”视图(或单击底部可用的“搜索”选项卡)。从最右边开始,将“搜索类型”设置为“文件更改”,然后键入要搜索的字符串。与上述命令相比,此方法具有以下限制:
Sourcetree只显示其中一个已更改文件中包含搜索词的提交。查找包含搜索文本的确切文件也是一项手动任务。不支持RegEx。
其他回答
场景:您使用IDE对代码进行了大清理。问题:IDE清理的比它应该清理的多,现在代码无法编译(缺少资源等)
解决方案:
git grep --cached "text_to_find"
它将找到更改“text_to_find”的文件。
现在可以撤消此更改并编译代码。
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 log -S "<words/phrases i am trying to find>" --all --oneline --graph
说明:
gitlog-我需要在这里写更多;它按时间顺序显示日志。-S“<单词/短语我试图查找>”-它显示了所有Git提交,其中任何文件(添加/修改/删除)都包含我试图查找的单词/短语,但没有“<>”符号。--all-在所有分支中强制执行和搜索。--oneline-它将Git日志压缩为一行。--graph-它创建按时间顺序提交的图形。
Jeet的答案在PowerShell中有效。
git grep -n <regex> $(git rev-list --all)
下面显示了任何提交中包含密码的所有文件。
# Store intermediate result
$result = git grep -n "password" $(git rev-list --all)
# Display unique file names
$result | select -unique { $_ -replace "(^.*?:)|(:.*)", "" }
为了简单起见,我建议使用GUI:gitk——Git存储库浏览器。它很灵活
要搜索代码:要搜索文件,请执行以下操作:当然,它还支持正则表达式:
您可以使用向上/向下箭头浏览结果。