Мне нужно очистить 20 коммитов в строке от истории git в голом репозитории. Я пытаюсь использовать следующую команду (обратите внимание, я не хочу писать полнометражные хэшей и попытаться использовать сравнение подстроки):Как использовать --commit-filter, чтобы исключить 20 commit в один проход git filter-branch?
git filter-branch -d /dev/shm/scratch --commit-filter '
if [ ${GIT_COMMIT0:7} = e687d59 ] ||
[ ${GIT_COMMIT0:7} = 58daf29 ] ||
...
[ ${GIT_COMMIT0:7} = 682b2c2 ] ||
[ ${GIT_COMMIT0:7} = 947db9e ];
then
skip_commit "[email protected]";
else
git commit-tree "[email protected]";
fi' --tag-name-filter cat -- --all
Но я сразу же получить сообщение как:
Переработанный 414840693169a74d052548c7a7a1bc5b06d3b79c (1/10360) (0 секунд прошло, оставаясь 0 предсказаны) мерзавец совершают-дерево: 49: мерзавец фиксации дерева: Плохая замена не мог писать переписано фиксации
Сложно ошибаться либо с условием ИЛИ, либо с подстроками, я не могу понять.
У меня также есть дополнительный вопрос: как я могу получить файл журнала с отображением старого хеша на новый, когда git filter-branch
завершил работу?
Только с помощью 'HEAD' плохо, если есть и другие отрасли, которые ответвляются _после_ переписанной истории , – j6t
@ j6t Спасибо за подсказку – cxw