Git commit потерял после reset --hard. Не найден fsck, а не reflog

Я хотел очистить рабочий каталог некоторых незагруженных файлов, но случайно пробежал git reset --hard.

Я понял, что потерял предыдущий (un-push) commit, поэтому я побежал git reset --hard ORIG_HEAD. Это не привело меня к моей утраченной битве.

Я запустил git reflog, но фиксация там не указана. Я также запускал git fsck --lost-found, но в списке не было никаких коммитов, только несколько несвязанных капель и деревьев.

Так как я не могу найти ссылку на потерянную фиксацию (кроме .git/COMMIT_EDITMSG, которая все еще имеет соответствующее сообщение фиксации и список изменений), я не уверен, как это сделать, чтобы восстановить фиксацию.

Есть ли способ вернуть потерянную фиксацию или мне нужно готовиться к всепоглощению?

Ответ 1

Не знаете, почему вы не можете найти свою фиксацию, так как комментарий @twalberg о git reset --hard правильный. Вот некоторые вещи, которые нужно попробовать.

У вас есть сообщение для фиксации, которую вы ищете (.git/COMMIT_EDITMSG). Если было написано COMMIT_EDITMSG, то конкретная фиксация должна быть где-то. Выделите текст из сообщения, которое является довольно уникальным, и попробуйте следующее:

git log -g --grep="<something specific from your commit message>"

Он перейдет через reflog и обнаружит коммиты, соответствующие тексту из вашего сообщения о потерянной фиксации.

Если вам не повезло, вы можете попробовать просмотреть все фиксации в каждой ветке:

git log --all --grep="<something specific from your commit message>"

Как только вы найдете хеш фиксации, вы можете проверить его, создать новую ветку, объединить ее обратно в текущую ветку и т.д.

Однако, если все это не удается, вы можете попытаться найти объекты, которые находятся в репозитории, но не являются частью какого-либо фиксации (например, добавлены в индекс, но не зафиксированы). Этот ответ может помочь вам в этом:

fooobar.com/info/96/...