Git отменить все изменения с очисткой reflog? - PullRequest
0 голосов
/ 15 ноября 2018

Как отменить все рабочие изменения в локальном репозитории за два месяца (новые ветки, коммит и т. Д.)? Историю рефлогов тоже нужно очистить.

1 Ответ

0 голосов
/ 15 ноября 2018

Этот вопрос поможет вам найти нужный коммит: Как просмотреть все коммиты за определенный день? В вашем примере первым коммитом, указанным этой командой, будет тот, который вам нужен:

git log --until="2018-09-01"

Тогда вы можете использовать предложение @ phd и сбросить свою песочницу на sha1 этого коммита:

git reset --hard <sha1>

Предупреждение: эта команда сброса также переместит HEAD вашей текущей ветки в этот коммит. Это, вероятно, то, что вы хотите, но вы должны знать об этом.

К сожалению, вам придется делать это для каждой ветви по одному, поэтому я понимаю, что это не глобальное решение, которое вы ищете.

Что касается reflog, я посмотрел, что делает expire, и он очищает старые ссылки. Я не вижу, как удалить самые новые строки в reflog, потому что это противоречит тому, для чего предназначен reflog. Однако reflog хранится в .git/logs/HEAD. Удаление строк из этого файла вручную работает, но я не вижу простого способа определить, какие из этих строк идут после определенной даты. Если вы редактируете этот файл, имейте в виду, что самые последние записи находятся в конце, а не в начале, как показано git reflog.

...