在两个松散分叉的git项目中恢复历史

时间:2013-02-11 17:32:13

标签: git git-merge

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

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

项目A和项目B大部分已经死亡,但在创建AB后确实收到了一些小补丁,其中一些后来被移植到AB。 AB的git repo是在没有A或B的历史记录的情况下创建的。我很容易告诉哪个文件或目录来自A,哪个来自B,我知道每个初始文件的提交是什么。

如果AB中的所有文件都基于A或B中的文件,我该如何在init之前恢复AB的历史记录?

请记住以下内容:

  • 来自A的文件可能位于类似B的目录中,反之亦然,因此我应该可以处理移动
  • 在某些时候,我想修改AB的移植补丁,以便它们归因于来自A或B的合并。
  • 我希望A或B能够合并AB,虽然只有其中一个能够做到这一点就没关系,只要我可以控制哪一个。
  • 大约有30-50个文件,所以我仍然可以为每个文件进行rebase,如果我没有这个文件,那将是首选。

1 个答案:

答案 0 :(得分:2)

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

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

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

您永远不能将AB合并到A或B中,因为AB也包含其他项目。你也许可以使用樱桃采摘,但我也对此表示怀疑。如果你想让AB的变化贡献给A和B,你应该看看子模块和git子树。