合并两个 Git 仓库的历史记录?

7
我有一个名为app的旧Git存储库。一年后,我想从头开始重新构建应用程序,所以我创建了一个新的存储库,名为app-2
现在,我意识到我应该只是创建一个新分支,而不是一个新的存储库,因为我想将app-2的历史记录放在app之上,然后摆脱app-2,使得app现在拥有app+app-2的所有历史记录。是否可能实现这个目标?
更新:
我尝试通过删除app中的所有文件(除了.git目录)并提交来“重置”app存储库。然后:
cd ~/Projects/app-2
git format-patch --stdout --root master > ../app/app-2-patches.txt
cd ../app
git am app-2-patches.txt

但是,在我在app-2中有分支的地方,我遇到了冲突。

是否可能在保留app-2历史分支结构的同时应用来自app-2的提交?


你需要它们在同一个代码库中的原因是什么?如果需要,它们必须在同一个分支中吗?为什么不只是创建一个单独的分支来存储旧版本的历史记录,然后将当前的新应用程序作为主分支呈现? - Amber
2个回答

1

您可以使用Git的嫁接点来实现此操作。首先从远程拉取app的历史记录到app-2,然后按照this answer中的说明进行操作。


具体来说,您可以使用 git filter-branch 将嫁接历史转换为“真实”历史,然后摆脱嫁接点。请记住,这将更改所有提交 ID! - user149341

0
第一步是将两个应用程序放在同一个代码库中;第二步是以某种合理的方式将它们合并。
对于第一步,我建议将app-2的所有仓库分支推送到应用程序代码库的分支中:
$ cd /path/to/app-2
$ git remote add app-repo /path/to/app
$ git push app-repo master:app-2-master     # master in app-2 goes to app-2-master in app repo
# repeat for other branches in app-2

现在在应用程序存储库中,您拥有所有分支和所有app-2分支。假设您将app-2视为派生自app。然后,您可以使用以下命令将app-2上的所有内容变基到app上:

$ cd /path/to/app
$ git checkout app-2-master
$ git rebase master

这可能涉及到大量的工作来解决冲突,但是 git 也会为您做很多工作。


1
提示:应该使用 git remote add 而不是 git add remote - Jesse Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接