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



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

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

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

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

请记住以下内容:

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

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

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

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

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

要在root-commit之前创建提交,需要整个AB回购的rebase

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

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

最新更新