Устранение конфликтов git rebase аналогично тому, как они были разрешены ранее

Я решил ретроспективно зафиксировать историю, которая никогда не была в Git, из другой старой системы управления версиями. Поэтому я создал сиротскую ветку "newroot" и импортировал ее из другой системы управления версиями. Следующий вопрос Вставить фиксацию перед фиксацией корня в Git?

Филиал "newroot" завершил работу с файлами, точно соответствующими корневой фиксации "ведущей" ветки.

Теперь я хочу переустановить ветвь "хозяин" на "новорожденную" сиротскую ветку, например:

git rebase --onto newroot --root master

Проблема в том, что я получаю запрос на разрешение всех конфликтов слияния. В течение многих лет происходит слияние. Я просто не могу разрешить их вручную. И действительно не нужно, поскольку эти слияния уже были решены в прошлом. Поскольку rebase на самом деле не изменяет содержимое (поскольку я перезагружаюсь на идентичном дереве), я хочу, чтобы Git "воспроизвести слияние" точно.

Есть ли способ указать, что rebase должен использовать то же разрешение, которое использовалось ранее?

Я понял, что здесь может помочь "ререр". Но мне пришлось бы включить это, когда оно первоначально слилось, не так ли? Или я могу ретроспективно воссоздать кеш "reerere"?


Я могу представить альтернативное решение моей задачи. Чтобы как-то попросить Git объединить ветки "newroot" и "master", фактически не перезарядив. Но я не уверен, что это возможно.

Ответ 1

Как-то попросить Git объединить ветки "newroot" и "master", фактически не перезарядив. Но я не уверен, что это возможно.

Это называется точкой трансплантата, а затем filter-branch, чтобы переписать главную историю.
См. этот пост в качестве примера или этот вопрос.

На стороне переадресации вы можете попробовать и использовать стратегию слияния, такую ​​как их, для разрешения любого конфликта с использованием основного содержимого ветки (с момента переустановки хозяина)

git rebase --merge -s recursive -X theirs --onto newroot --root master