0

有 3 个项目,每个项目都有自己的 git repo:

  • 项目A,独立于B的项目
  • 项目 B , 一个独立于 A 的项目
  • 项目 AB,一个使用一些 A 和一些 B 的项目。源、文件结构等的合并,并进行了一些修改以允许两者正确混合。

项目 A 和项目 B 大多已死,但在 AB 创建后确实收到了一些小补丁,其中一些后来被移植到 AB。AB 的 git 存储库是在没有来自 A 或 B 的历史的情况下创建的。我很容易分辨出哪个文件或目录来自 A,哪个来自 B,而且我知道每个初始文件来自哪个提交。

假设 AB 中的所有文件都基于来自 A 或 B 的文件,我如何在初始化之前恢复 AB 的历史记录?

请记住以下几点:

  • 来自 A 的文件可能位于类似 B 的目录中,反之亦然,所以我应该能够处理移动
  • 在某些时候,我想重新定位 AB 的移植补丁,以便将它们归因于 A 或 B 的合并。
  • 我希望 A 或 B 能够合并 AB,尽管只有其中一个能够做到这一点是可以的,只要我可以控制哪一个。
  • 大约有 30-50 个文件,所以我仍然可以为每个文件重新设置基准,如果我不必这样做,那将是首选。
4

2 回答 2

2

一般来说,您可能希望将 A 和 B 设置为根提交的父级。你可以在这里看到如何做到这一点:

https://stackoverflow.com/a/4164767/758345

Git 现在将了解这些文件的来源并处理重命名等。您现在应该能够从 A 和 B 合并到 AB。

您永远不能将 AB 合并到 A 或 B,因为 AB 还包含另一个项目。您也许可以使用樱桃采摘,但我也对此表示怀疑。如果您希望将 AB 的更改贡献给 A 和 B,您应该查看子模块和 git-subtree。

于 2013-02-19T19:03:49.630 回答
0

root-commit要在您需要rebase整个ABrepo之前创建提交。

也许引入这些旧提交的另一种方式是 孤儿分支

git checkout --orphan project-a
git rm -rf .
git remote add upstream-a git://foo.org/project-a
git pull upstream-a master

git checkout --orphan project-b
git rm -rf .
git remote add upstream-b git://foo.org/project-b
git pull upstream-b master
于 2013-02-11T18:02:17.743 回答