Допустим, у меня есть две ветви в RepoX, которые называются BranchA и BranchB. RepoX также имеет подмодуль под названием SubmoduleY.
В BranchA имеется субмодуль Y в редакции 'abc', в BranchB есть субмодуль Y в редакции 'def'.
Скажем, я хочу объединить BranchA с BranchB, но я хочу оставить SubmoduleY BranchB, указывающий на его первоначальную версию 'def'. Я вижу несколько способов сделать это:
Метод 1:
- Оформить заказ BranchB.
- Переместите SubmoduleY в ревизию 'abc', чтобы сделать фактическое слияние безболезненным (сейчас мы не хотим выполнять слияние на уровне подмодуля).
- Зафиксируйте новую ревизию для SubmoduleY (у нас не может быть плавающей для слияния).
- Объединить BranchA в BranchB. Разрешите любые конфликты.
- Переместить SubmoduleY обратно в ревизию 'def'.
- Зафиксируйте новую версию для SubmoduleY.
- Нажмите изменения до основного репо.
Метод 2:
То же, что и в методе 1, но вместо выполнения шага 6 выполните перебазирование и избавьтесь от дополнительной фиксации подмодуля, начиная с шага 3.
Кажется, у обоих есть досадные недостатки:
Метод 1 помещает в историю два дополнительных коммита.
Метод 2 забывает любые изменения, связанные с ревизиями подмодуля, потому что эти коммиты удаляются. Поэтому при любом последующем слиянии придется снова решать некоторые проблемы.
Есть ли лучший способ?