РЕДАКТИРОВАТЬ: обновление на основе новых результатов тестирования с использованием 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 - как составить список ВСЕХ объектов в базе данных
Старое решение: работает, только если объект находится в reflog
Чтобы найти строку "text"во всех локальных объектах:
git log --reflog -Stext
Чтобы найти шаблон" шаблона "во всех локальных объектах:
git log --reflog --grep=pattern
Это будет искать во всех объектах, поэтому будет работать, даже есликоммит / ветка удалена.После удаления объекта из локального хранилища (например, через gc) он больше не будет включен в поиск.