如何将分支从一个回购迁移到另一个具有不同历史的回购?

How to migrate branches from one repo to another with different histories?

现在我正试图通过删除 git 与源代码管理中长期删除的二进制文件关联的对象来精简一个臃肿的存储库。我正在使用 BFG 回购清理器,它成功地精简了回购并保持当前提交不变,但我正在努力解决如何协调迁移到精简后的回购。

就上下文而言,所有开发人员都在主仓库的分支上工作,并且仅通过 PR 合并更改。对于迁移,我想让每个人都从上游拉取最新的更改,然后 运行 BFG 工作,强制推送,然后让每个人重新 fork 和重新克隆。

这很简单,但事情很棘手,因为每个人都有自己的回购分叉中的历史,其历史即将从根本上重写。我正在努力解决的问题是如何让开发人员将功能分支从他们的旧分叉和克隆迁移到他们的新分叉和克隆。我尝试过的所有事情(即添加旧的回购作为远程和拉动)都带来了比我想要的更多的历史,或者根本没有历史(即 cherry-pick);理想情况下,我们只会带来分支及其提交中已更改的历史记录。

这里有最佳实践吗?

adding the old repo as a remote and pulling

几乎:添加旧的 repo 和 fetch

然后你可以做一个git rebase --onto,它允许你将历史的部分重播到新的repo

git checkout master # or any other commit from  which you want the feature branch to start
git checkout -b feature_branch old_repo/feature_branch # re-create the feature-branch
git rebase --onto master first_commit_fb~1 feature_branch

first_commit_fb 是旧仓库中该功能分支的第一次提交。