Как вырезать из большой истории git, но сохранить возможность слияния/перебазирования

В настоящее время я сталкиваюсь с большим репозиторием git (давайте назовем его upstream) с коммитами, которые насчитывают более 10 лет. Мне не нужна большая часть истории из него. На самом деле было бы достаточно вырезать из него ветку и перенести ее в собственное репо, а также сохранить возможность время от времени объединять коммиты из исходной ветки upstream. На мой взгляд, это сделало бы размер репо небольшим.

Изображено: из

          D' - E' upstream/release
         /
A - B - C - D - E upstream/dev

to

D' - E' myrepo/release

и иметь возможность git merge upstream/release или git rebase myrepo/master.

Я знаю, что myrepo/release потребуется некоторая искусственная инициализация. Я уже много пробовал с git checkout --orphan, git rebase --onto и т. д., но не нашел решения. Может кто поможет хорошей идеей!

Спасибо, Йенс


person jenzopr    schedule 05.03.2020    source источник


Ответы (1)


Я придумал следующее:

git checkout --orphan my_release D'
git add .
git commit -m "Started new history"

а затем перебазировать всю ветку upstream/release:

git checkout upstream/release
git rebase --onto my_release D' upstream/release

и слияние:

git checkout my_release
git merge upstream/release

Это приводит к новым идентификаторам коммитов, но обновление в будущем может работать через перебазирование.

Этот ответ очень помог.

person jenzopr    schedule 05.03.2020