Попытка переместить историю из одного репо в другое (не типичное root) путем добавления удаленного источника и перенастройки в ветку в локальном репо назначения.
Источник:
A-B-C
\ /
E
Требуется в пункте назначения:
F-A'-B'-C'
\ /
E'
В документации для git rebase --rebase-merges говорится, что он сохранит топологию и повторно создаст коммиты слияния, но:
Любые разрешенные конфликты слияния или ручные поправки в этих коммитах слияния должны быть разрешены / повторно применены вручную.
Теперь я хочу избежать повторного разрешения конфликтов, и я озадачен, зачем это вообще нужно . Содержимое коммита слияния есть, я могу отсоединить HEAD от.
Итак, я попробовал
$ git rebase -i --onto destnewbranch --root --rebase-merges srcbranch
Could not apply C... master # Merge branch 'master'
(detached HEAD|REBASE x/y)
$ git status
interactive rebase in progress; onto F
Last commands done (n commands done):
pick B
merge -C C master # Merge branch 'master'
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Чтобы разрешить конфликты, я беру содержимое C:
$ git reset --hard C
Теперь контент хорош, но история - нет, поэтому:
$ git reset --soft HEAD@{1}
Все, что осталось сделать, это продолжить перебазирование:
$ git commit
$ git rebase --continue
Однако история неверна, так как у меня осталось:
F-A'-B'-C'
Итак, C 'не является фиксацией слияния, хотя в ней есть разрешенные изменения как B, так и E. Слияние коммитов, которые не' t, потому что конфликт успешно перебазирован с неповрежденной топологией. обычный. Если я не сделаю сброс и не разрешу конфликты вручную, фиксация git создаст фиксацию слияния.
git версия 2.26.0. windows .1