Объединить два репозитория git, сохранив всю историю коммитов

#git

#git

Вопрос:

У меня есть два репозитория git, каждый из которых содержит разные версии одной и той же кодовой базы.

Коммиты в репозитории 1 (самые последние из последних):

  version 1
 version 2
 version 3
 version 4
 version 5
  

Коммиты в репозитории 2:

  version 3
 commit that isn't a new version
 another commit that isn't a new version
 yet another commit that isn't a new version
 version 5
  

Обратите внимание, что в репозитории 1 версия 5 основана на версии 4, но в репозитории 2 версии 4 нет, поскольку версия 5 действительно была основана на версии 3 (а версия 4, по сути, стала заброшенной веткой).

Я бы хотел поместить все это в одно репозиторий:

  version 1
 version 2
 version 3
   branch  version 4
 commit that isn't a new version
 another commit that isn't a new version
 yet another commit that isn't a new version
 version 5
  

Я был бы признателен, если бы кто-нибудь мог объяснить не только как это сделать, но и почему правильно делать это таким образом, чтобы я мог лучше понять git.

Ответ №1:

Взгляните на git rebase --preserve-merges --onto . После того, как вы перенесете коммиты из второго репозитория в первый, вы можете переместить части истории, чтобы иметь нужного вам предка.

Надеюсь, это поможет.

Редактировать:

Чтобы получить изменения из второго репозитория, добавьте его как удаленный:

 git remote add secondary <url to your secondary repo>
  

Затем вы можете извлекать оттуда:

 git fetch secondary
  

Теперь вы можете проверять с помощью gitk --all или git log --all --graph --decorate --oneline и делать с rebase --onto что хотите.

Комментарии:

1. Вероятно, вам следует указать, как извлекать коммиты из второго репозитория в первый; это сделало бы этот ответ потрясающим.