我需要通过将第二个存储库的根目录重新绑定到第一个存储库的头部来合并两个git存储库。
在这样做时,它应该保持:
我怎样才能做到这一点?
这只需要完成一次,我不需要在合并后保留第二个存储库。
注意:您可以使用链接的存储库来测试您的解决方案。
以下是一个例子:
合并 - 测试 - 第一
我的第一个(示例)存储库看起来像这样(https://github.com/Pro/merge-test-first):
* fcc6649 (HEAD -> master) J1
| * ba0ecb9 (branch_I1) K1
|/
* 91bf6a4 I1
* acacd68 (tag: tag_H1) H1
|\
| * 40bf845 (branch_B1) F1
| * 3ea2925 D1
* | 3780004 G1
| | * f7a61eb (branch_D1) E1
| |/
| * aae948d C1
|/
* 739d400 B1
* 6717e64 A1
(git log --oneline --abbrev-commit --all --graph --decorate --color
的输出)
它包含一个分支(branch_B1
),其基数为B1
,然后合并为主H1
和两个分支branch_D1
,branch_I1
合并 - 测试 - 第二
第二个存储库应该合并然后重新绑定到merge-test-first/master/HEAD
具有一些类似的结构(https://github.com/Pro/merge-test-second):
* 28e726a (HEAD -> master) I2
|\
| * 46f9d71 (branch_D2) G2
* | 2ae8b4d H2
| | * 606a346 (branch_E2, tag: tag_F2) F2
| |/
| * bed8db1 E2
|/
* e94c6d7 (tag: tag_D2) D2
| * 8a98058 (branch_B2) C2
|/
* 82cb3ee B2
* 1b12fdf A2
最终结果应为:
来自第二个仓库的 A2
应该从第一个仓库重新定位到J1
,包括所有提交,作者日期和分支以及合并:
* (HEAD -> master) I2
|\
| * (branch_D2) G2
* | H2
| | * (branch_E2, tag: tag_F2) F2
| |/
| * E2
|/
* (tag: tag_D2) D2
| * (branch_B2) C2
|/
* B2
* A2
|
* J1
| * (branch_I1) K1
|/
* I1
* (tag: tag_H1) H1
|\
| * (branch_B1) F1
| * D1
* | G1
| | * (branch_D1) E1
| |/
| * C1
|/
* B1
* A1
所以我需要以某种方式添加红色边缘(注意:此图中的标签不可见,但也应该重新标记):
到目前为止我尝试了什么:
git rebase test-first/master test-second/master
--preserve-merges
然后使用一些git magic(git filter-branch ...
)来重写作者日期。