Объедините два хранилища 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 в приведенной выше ссылке - это хорошее место для начала)