Скажем, у меня есть два различных репозитория как так:
Project 1:
Init---A---B---C---HEAD1
Project 2:
Init---D---E---F---G---HEAD2
Есть ли способ повторно основывать Проект 1 (Init для ЗАГОЛОВКА) в фиксацию Init Проекта 2, таким образом, это похоже на это:
Project 1 & 2:
A---B---C---HEAD1
/
Init---D---E---F---G---HEAD2
Содержание Проекта 1 и Проекта 2 подобно. Основное различие - то, что их файловая структура немного отличается как так:
Project1:
MyProject/
File1
File2
File3
Project2:
MyParentProject/
MyProject/
File1
File2
File3
SomeFolder/
SomeOtherFolder/
...etc/
К вашему сведению: MyProject не является подмодулем MyParentProject. MyProject и MyParentProject существуют в двух отдельных местах как два отдельных репозитория мерзавца.
Вы можете рассматривать один как удаленный репозиторий для другого. В Project1 выполните следующие команды:
git remote add project2 <path_to_project_2>
git fetch project2
git branch --track project2Branch project2/master
git checkout project2Branch
Используйте git log, чтобы найти хэш для начальной фиксации этой ветки (которой является Project2). Затем запустите
git checkout master # or whatever branch you want to rebase
git rebase <hash-for-commit>
. Теперь вы перенастроили Project1 на Project2. Поскольку это звучит как одноразовая операция, когда вы будете использовать только один репозиторий, вы можете выполнить очистку с помощью
git remote rm project2
. Итак, теперь ваша основная ветка перебазирована с помощью init Project2, а project2Branch имеет остальную историю Проект2. Это своего рода взлом, но он сделает то, что вы хотите.
Я думаю, вы можете использовать git-filter-branch
с опцией --parent-filter
.