Я бы поступил так.
- Клонируйте репозиторий в исходном режиме как обычно, с историей и всем.
- Создайте в нем ветку поверх главной ветви.
- Для каждого отдельного коммита, который вы должны экспортировать (вероятно, только верхний коммит, если у вас нет полезной недавней истории):
- Проверьте, что коммит в вашем репо;
- Скопируйте его в дерево репозитория верхнего уровня, как файлы;
- Просмотр изменений, отмена ненужных деталей;
- Пройти тесты и т. Д .;
- Передать изменения.
Вам, вероятно, придется добавить несколько изменений после этого, чтобы заставить вещи работать поверх мастера текущего апстрима. Передайте их тоже.
Теперь у вас есть ветвь сверху основного мастера, которая может быть предложена как запрос на извлечение. Гарантируется чистое слияние (потому что это поверх master, а не ветвления от предыдущего коммита), в нем есть ваши изменения, все тесты пройдены (включая тесты для ваших изменений).
Если вы хотите, чтобы ваша предыдущая история использовалась для справки, есть несколько вариантов.
Самое простое: сохранить его в своем текущем (не восходящем) репо. Это никуда не денется, но вы должны, например, Подберите ваши изменения в другом репо.
Легко, но немного глупо: создайте новую ветку в репозитории восходящего потока поверх первого коммита (см. эти инструкции ) и перенесите всю свою историю в эту ветку. Недостатком является то, что ваша история теперь вообще не связана с историей магистрали.
Более болезненный: определите точки, где вы коснулись вверх по течению, и объедините, если хотите.
- Сделайте то же, что и выше, чтобы создать ветку с вашей историей в репозитории (
baseless_branch
).
- Определите коммит, с которого вы начали разработку, и создайте новую ветку поверх него (
based_branch
).
- Cherry-выбрать диапазон коммитов от
baseless_branch
до based_branch
до того момента, когда вы снова скопировали файлы из master.
- (Необязательно.) После достижения точки «скопированные файлы» объедините
master
с вашим based_branch
с master
в том месте, где вы скопировали файлы. Это должно слиться чисто, потому что государство то же самое. (У меня нет хорошей идеи, как определить эти коммиты в master.)
- Продолжайте сбор вишни (и слияние), пока не достигнете вершины
baseless_branch
; теперь объединяйтесь с master
, просматривайте и разрешайте конфликты, добавляйте необходимые изменения и т. д.
Теперь у вас есть собственная ветвь, которая растет с правильной точки истории, опционально с промежуточными точками слияния, где она соответствует основной истории. Эта ветвь также является хорошим пиар-материалом.