在 Git 中,如何找到对象数据库中包含字符串模式的所有 blob 的 SHA-1 ID? git-grep
仅提供文件路径,不提供 sha1 ID。
最佳答案
编辑:根据使用 Git 2.7.4 版的新测试结果进行更新
看起来我发布的解决方案只通过了 reflog。因此,如果您删除一个 reflog 条目,则不会搜索该条目 - 即使该对象仍然存在。
所以你必须做类似的事情:
{
git rev-list --objects --all --grep="text"
git rev-list --objects -g --no-walk --all --grep="text"
git rev-list --objects --no-walk --grep="text" \
$(git fsck --unreachable |
grep '^unreachable commit' |
cut -d' ' -f3)
} | sort | uniq
源自:Git - how to list ALL objects in the database
旧解决方案:仅当对象在 reflog 中时才有效
在所有本地对象中查找字符串“text”:
git log --reflog -Stext
在所有本地对象中查找模式“pattern”:
git log --reflog --grep=pattern
这将搜索所有对象,因此即使删除了提交/分支也能正常工作。一旦对象从本地存储库中删除(例如通过 gc),它将不再包含在搜索中。
关于Git:获取所有带有模式的 Blob ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7088855/