Этот вопрос поможет вам найти нужный коммит: Как просмотреть все коммиты за определенный день?
В вашем примере первым коммитом, указанным этой командой, будет тот, который вам нужен:
git log --until="2018-09-01"
Тогда вы можете использовать предложение @ phd и сбросить свою песочницу на sha1 этого коммита:
git reset --hard <sha1>
Предупреждение: эта команда сброса также переместит HEAD вашей текущей ветки в этот коммит. Это, вероятно, то, что вы хотите, но вы должны знать об этом.
К сожалению, вам придется делать это для каждой ветви по одному, поэтому я понимаю, что это не глобальное решение, которое вы ищете.
Что касается reflog, я посмотрел, что делает expire
, и он очищает старые ссылки. Я не вижу, как удалить самые новые строки в reflog, потому что это противоречит тому, для чего предназначен reflog. Однако reflog хранится в .git/logs/HEAD
. Удаление строк из этого файла вручную работает, но я не вижу простого способа определить, какие из этих строк идут после определенной даты. Если вы редактируете этот файл, имейте в виду, что самые последние записи находятся в конце, а не в начале, как показано git reflog
.