1

我需要知道在 codebasehq.com 上将 git 历史从一个存储库移动到另一个存储库的正确方法。情况:

  • 在 codebasehq.com 上有一个 repo,我在路径上将其称为“旧”mycompany.codebasehq.com/projects/OLDNAME/repositories/PROJECTNAME
  • 在旧仓库进行一些开发后,团队意识到这个仓库实际上应该位于 codebasehq.com 上的不同位置,并且只使用“旧”仓库中的文件进行“新”仓库并将其推送到mycompany.codebasehq.com/projects/NEWNAME/repositories/PROJECTNAME. 因此,新的仓库现在只有一个(初始)提交,其中包含旧仓库中的所有文件,但根本没有旧历史记录。

我想将历史从旧仓库带回新仓库。我在这里阅读了关于变基和移植的内容:如何将一个 Git 存储库变基到另一个 Git 存储库?我能够成功地将两个存储库移植到一个存储库中。

我需要知道的是如何通过包含所有旧历史的 rebase/grafted repo 将这个新的 repo 替换为 1 个初始提交。我应该删除这个错误的新仓库并从头开始重新创建它,还是只是向它推送一些特殊的标志?

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 git@codebasehq.com:mycompany/project/repo.git
 ! [remote rejected] fullhistory -> fullhistory (n/a (unpacker error))
error: failed to push some refs to 'git@codebasehq.com:mycompany/project/repo.git'
4

1 回答 1

1

您可以尝试以下方法:

  • git clone OLDREPO
  • git remote add new NEWREPO
  • git fetch new

你的旧历史现在应该在,master而你的新历史在new/master

  • git checkout new/master
  • git rebase -i master

这将启动一个交互式 rebase,将所有内容new/mastermaster. 由于您可能想从新代码中删除第一个提交(当时是工作的简单副本),您应该删除将显示给您的编辑器中的相应行。其余的应设置为pick.

于 2012-11-19T15:14:02.230 回答