Как я могу перебазировать все мои локальные ветки (и теги) Git, когда восходящий поток переписал историю ?

Сопровождающий репозитория конкретного (встроенного) ядра Linux изменил кучу старых коммитов, чтобы очистить историю. Как следствие, все коммиты имеют другой SHA.

Когда я использую git fetch из этой перезаписанной истории, мне нужно перебазировать мою локальную ветку (-а) на точку входа локальной ветки отслеживания, которая соответствует точке в местное дерево, где начинаются мои собственные ветви. Стандартное решение:

git rebase --onto SHAxx master ownbranch

(SHAxx соответствует c2 удаленных / origin / master на графике ниже).

Однако, когда у меня есть несколько собственных веток, у которых есть один единственный предок в master, я должен применить rebase для каждого индивидуальное отделение. Вместо этого я хочу перенести все ветки с любыми связанными тегами в новую точку входа в выбранной ветке отслеживания одним действием.

Графически, состояние после выборки, перед любым действием (упрощенно - за левым краем находится глубокая основная история) :

    c1'--c2'--c3'--c4'--c5'--c6'--c7--c8--c9 remotes/origin/master
   /
--o--c1--c2--c3--c4--c5--c6 master
           \
            o---o---o---o---o  branch1
                     \
                      o---o  branch2 (etc.)

Если быть точным: когда моя собственная работа начинается с основного коммита c2, я хочу перебазировать собственное поддерево со всеми его тегами (если они есть) одним действием на c2 'удаленного / origin / master (с его отдельным SHA по сравнению с мастером c2).

В то время я могу полностью удалить мастер и сделать remotes / origin / master новым мастером своей собственной работой:

    c1--c2--c3--c4--c5--c6  (old master, not referenced anymore)
   /
--o--c1'--c2'--c3'--c4'--c5'--c6'--c7--c8--c9 master = remotes/origin/master
            \
             o---o---o---o---o  branch1
                      \
                       o---o  branch2 (etc.)

Затем я бы проверил, дает ли процесс сборки тот же результат, что и раньше и если все в порядке: приступить к постепенному слиянию основных обновлений (например, для каждого шага субиндекса nn в 2.6.nn) в мою собственную (специфичную для платы) ветку.

Или есть другой / лучший подход для реализации того же результата?

Возможное решение представлено на Перебазирование ветки, включая все ее дочерние элементы , но теги не перемещаются.

9
задан Community 23 May 2017 в 11:59
поделиться