В общем, самый простой способ переместить несколько ссылок одновременно (даже если это только одна ветвь и теги, доступные этой ветке) - это использовать git filter-branch
.
Во-первых, вы должны использовать --commit-filter
чтобы "пропустить" коммиты, которые не имеют тегов.Вам нужен скрипт, который может сказать, есть ли в скрипте тег.Вы можете использовать что-то вроде
git describe --exact-match --tags
и, если это найдет совпадение, оно вернет 0 (а также напечатает имя тега на stdout);так что ваш фильтр может условно отложить либо commit-tree
, либо skip-commit
в зависимости от того, найден ли тег.
Затем вам потребуется добавить --tag-name-filter cat
или что-то подобное, чтобы заставить теги действительно перемещаться.
Подробнее о filter-branch
см. https://git -scm.com / docs / git-filter-branch
Это своего рода сортировка, подобная тщательному написанию сценариев для множестваперебазировать операции, с автоматическим способом сопоставления тегов.Он работает хорошо, потому что вы не хотите изменять содержимое (TREE
) коммитов, которые вы сохраняете, поэтому основной механизм ребазинга на самом деле не нужен.