Объедините два хранилища Git и сохраните основную историю

Мне нужно объединить два репозитория Git в новый, третий репозиторий. Я выполнил следующие инструкции, и они работают, но результат не тот, который я ожидал. Объединить два репозитория Git без нарушения истории файлов

Посмотрите на это:

Git Операция слияния

Мастер не назначен.

  • Можно ли объединить все на один и тот же мастер?
  • Я хотел бы иметь чистую историю на хозяине.

Вы можете использовать мой репозиторий примеров в github:

Это мой результат объединения.

Это та ситуация, в которой я хотел бы иметь: (раскрашенное решение!!!)

Окрашенное решение!!

Как я попал в текущую ситуацию:

# Assume the current directory is where we want the new repository to be created
# Create the new repository
git init

# Before we do a merge, we have to have an initial commit, so we'll make a dummy commit
dir > Read.md
git add .
git commit -m "initial commit"

# Add a remote for and fetch the old RepoA
git remote add -f RepoA https://github.com/DimitriDewaele/RepoA

# Merge the files from RepoA/master into new/master
git merge RepoA/master --allow-unrelated-histories

# Do the same thing for RepoB
git remote add -f RepoB https://github.com/DimitriDewaele/RepoB

# Merge the files from RepoB/master into new/master
git merge RepoB/master --allow-unrelated-histories

Вся помощь приветствуется!

UPDATE: ANSWER

Правильный ответ заключается в rebase, а не в слиянии.

код:

# Rebase the working branch (master) on top of repoB
git rebase RepoB/master

# Rebase teh working branch (master with RepoB) on top op repoA
git rebase RepoA/master

Остается одна проблема. Второе репо потеряет родительское представление. Я добавил следующий вопрос: Объединить два репозитория Git и сохранить историю

введите описание изображения здесь

Ответы

Ответ 1

Легко, вместо слияния используйте rebase. Предполагая, что вы хотите сначала repoA/master (после выбора и добавления пультов)

# starting on master
git rebase RepoB/master # place master on top of masterB
git rebase RepoA/master # place master (with masterB) on top of masterA

Обратите внимание, что перестановки потенциально разрушительны и сначала немного неинтуитивны, поэтому я настоятельно рекомендую сначала прочитать о них (документация SO в приведенной выше ссылке - это хорошее место для начала)