У нас на проекте существует следующая организация веток в Git-репозитории:
master
\- dev
\- feature-####
\- task-####
Время от времени в dev-ветку мы сливаем feature-ветки, работу над которыми считаем завершённой. По такому же принципу в feature-ветки мы сливаем task-ветки. После таких слияний над остальными ветками, которые ещё не объединены со своими родительскими, мы делаем rebase (обязательно с опцией -p) поверх новых изменений в родительской ветке. Это довольно утомительно и затратно по времени, если у ветки, которой нужен rebase, есть ещё дочерние ветки, потому как для каждой из них нужно повторить rebase отдельно, не забыв ни одной ветки.
В принципе, можно реализовать такую стратегию rebase в полуавтоматическом режиме с помощью скриптов, но кажется, что это будет велосипед непроверенного качества. Некоторое время назад у меня получилось написать устанавливаемый в git-директорию Python-скрипт, но в его стабильности и удобности я до конца не уверен + не хочу таскать его с собой, равно как и сам Python. Думаю, можно было бы даже как-то реализовать задумку с помощью более-менее простого скрипта на bash (git-rev-parse, git-rev-list, git-merge-base), и чуть ли не в алиасы его прописать, но и тут не уверен. Например, что делать если одну из дочерних веток нельзя объединить автоматически.
Существуют ли уже готовые инструменты для Git, умеющие переносить ветки вместе со всеми их дочерними ветками?