Git filter-branch --msg-filter, чтобы переписать сообщение с нажатой фиксацией
Как я могу переписать сообщение о старой фиксации, которая уже нажата на частный пульт?
Я хочу сохранить отметки времени и теги.
Я нашел эту команду здесь:
git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all
Чтобы сохранить теги, которые я добавил: --tag-name-filter cat
При выполнении команды git мне сообщается: сбой фильтра msg
Сообщение, которое я хочу изменить, является объединенным сообщением "Слияние ветки" /... "" Это проблема?
Ответы
Ответ 1
Решение заключалось в том, чтобы избежать косой черты в "release/...", используя обратную косую черту. Таким образом, я использовал команду
git filter-branch -f --msg-filter \
'sed "s/release\/Version-[0-9].[0-9].[0-9]/develop/g"' \
--tag-name-filter cat -- --all
Ответ 2
Вот немного улучшенная версия, которая также обновляет все ссылки на хеширование коммитов в сообщениях фиксации "на лету" при выполнении фильтрации:
rm -f /tmp/git;
touch /tmp/git;
git filter-branch \
--subdirectory-filter <DIRECTORY> \
--tag-name-filter cat \
--commit-filter 'echo -n "s/${GIT_COMMIT}/" >>/tmp/git; \
NEW=`git_commit_non_empty_tree "[email protected]"`; \
echo "${NEW}/g" >> /tmp/git; echo ${NEW}' \
--msg-filter 'sed -f /tmp/git' \
-- --all