【问题标题】:Separating two Git repositories that were merged together分离两个合并在一起的 Git 存储库
【发布时间】:2016-08-18 08:55:04
【问题描述】:

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

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

后来我开始研究另一个项目 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

这两个项目都是完全私人的项目,只有我一直在从事。因此,重新定位/重新创建所有提交不是问题。我已经阅读了很多关于 SO 和网络上其他地方的帖子,但仍然无法弄清楚最好的方法是将其拆分。

【问题讨论】:

    标签: git git-rebase git-rewrite-history git-cherry-pick


    【解决方案1】:

    这是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 也一样,在单独的新存储库中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 2020-04-06
      • 2010-11-28
      相关资源
      最近更新 更多