分离合并在一起的两个 Git 个存储库

Separating two Git repositories that were merged together

我有一个项目,我在 Visual Studio 中工作了一段时间,并将我的更改保存在 Git 存储库中。我们称之为项目 A,它具有以下提交历史

A0-A1-A2-A3-A4-A5-A6

稍后我开始处理另一个项目 Project B,它位于另一个 Git 存储库中。

B0-B1-B2-B3

在某些时候,我决定这两个项目确实彼此直接相关,因此我将项目 B 合并到项目 A 存储库中,并将其添加到项目 A Visual Studio 解决方案中。项目 A 存储库现在有两个根提交 A0 和 B0。

A0-A1-A2-A3-A4-A5-A6-M1
                     /
        B0-B1-B2-B3-

在这一点之后,我假设这些项目是一个,并且不会费心将我的工作分成独立的项目 A 和项目 B 分支。大多数提交都与项目 A 或项目 B 相关。虽然,有一些提交我同时更改为 A 和 B。

A0-A1-A2-A3-A4-A5-A6-M1-AB1-A7-B4-B5-AB2-B6-A8-A9
                     /
        B0-B1-B2-B3-

但现在我决定合并这些项目是错误的,并且想将这两个项目的历史拆分回各自的 git 存储库。

A0-A1-A2-A3-A4-A5-A6-A7-A8-A9

B0-B1-B2-B3-B4-B5-B6

这两个项目都是完全私人的项目,只有我一直在做。所以 rebasing/recreating 所有提交都不是问题。我已经阅读了很多关于 SO 和网络其他地方的帖子,但仍然无法弄清楚最好的方法是将其拆分。

这是 git rebase 的工作:

git clone current_repos new_repos_only_a ; cd new_repos_only_a
git rebase -i A6
# skip all B commits, pick all A commits, do not pick the merge commit (should be skipped by git automatically)

(当然 B 也一样,在单独的新存储库中)。