Как правильно нажимать один репозиторий 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.