Как правильно нажимать один репозиторий git поверх другого на codebasehq?
Мне нужно знать правильный способ перемещения истории git из одного репозитория в другой на codebasehq.com. Ситуация:
- существует repo на codebasehq.com, который я называю "старым" на пути, например
mycompany.codebasehq.com/projects/OLDNAME/repositories/PROJECTNAME
- После некоторой разработки в старом репо команда поняла, что это репо должно фактически находиться в другом месте на codebasehq.com и делать "новое" репо только с файлами из "старого" репо и нажимать на
mycompany.codebasehq.com/projects/NEWNAME/repositories/PROJECTNAME
. Таким образом, новое репо прямо сейчас имеет только одно (начальное) коммитирование со всеми файлами из старого репо, но без старой истории.
Я хочу вернуть историю из старого репо в новое репо. Я прочитал о rebase и graft here: Как переустановить один репозиторий git на другой?, и я смог успешно перенести два репозитория в один.
Что мне нужно знать, так это то, как заменить это новое репо на 1 начальную фиксацию с помощью rebased/transfted repo с включенной старой историей. Должен ли я удалить это неправильное новое репо и воссоздать его с нуля или просто нажать с некоторыми специальными флагами?
UPD: Я попытался просто нажать ветвь с полной историей (старый + новый) на mycompany.codebasehq.com/projects/NEWNAME/repositories/PROJECTNAME
в качестве новой ветки с именем fullhistory
, но получил ошибку:
bash-3.2$ git push codebasehq fullhistory
Counting objects: 104, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (74/74), done.
Writing objects: 100% (74/74), 1.74 MiB, done.
Total 74 (delta 36), reused 5 (delta 0)
fatal: unresolved deltas left after unpacking
error: unpack failed: unpack-objects abnormal exit
To [email protected]:mycompany/project/repo.git
! [remote rejected] fullhistory -> fullhistory (n/a (unpacker error))
error: failed to push some refs to '[email protected]:mycompany/project/repo.git'
Ответы
Ответ 1
Вы можете попробовать следующее:
-
git clone OLDREPO
-
git remote add new NEWREPO
-
git fetch new
Ваша старая история должна теперь находиться в master
, в то время как ваша новая история находится в new/master
-
git checkout new/master
-
git rebase -i master
Это запустит интерактивную перезагрузку, которая пересаживает все, начиная от new/master
на master
. Поскольку вы, вероятно, хотите удалить первый коммит из своего нового кода (тот, который был простой копией работы в то время), вы должны удалить соответствующую строку в редакторе, который будет показан вам. Остальное должно быть установлено на pick
.