gpt4 book ai didi

git - 如何将两个独立的不相关的 Git 存储库 merge 为一个具有单一历史时间轴的存储库

转载 作者:IT王子 更新时间:2023-10-29 00:48:29 24 4
gpt4 key购买 nike

我有两个不相关的(不共享任何祖先 checkin )Git 存储库,一个是 super 存储库,它包含许多较小的项目(我们称之为存储库 A)。另一个只是一个较小项目的临时本地 Git 存储库(我们称之为存储库 B)。从图形上看,它看起来像这样

A0-B0-C0-D0-E0-F0-G0-HEAD (repo A)
A0-B0-C0-D0-E0-F0-G0-HEAD (remote/master bare repo pulled & pushed from repo A)
A1-B1-C1-D1-E1-HEAD (repo B)

理想情况下,我真的很想将存储库 B merge 到具有单一历史时间轴的存储库 A 中。所以看起来我最初是在 repo A 中开始项目的。从图形上看,这将是理想的最终结果

A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (new repo A)
A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (remote/master bare repo pulled & pushed from repo A)

我一直在阅读子模块和子树(顺便说一句,Pro Git 是一本相当不错的书),但它们似乎都迎合了维护两个独立分支的解决方案,子模块能够从上游和子树正在稍微减少头痛。这两种解决方案都需要额外的和专门的 git 命令来处理主分支和子树/模块分支之间的 checkin 和同步。这两种解决方案也会产生多个时间线(使用子树时,您甚至可以在使用 --squash 时获得 3 个独立的时间线)。

SO 最接近的解决方案似乎在谈论“graft”,但真的是这样吗?目标是拥有一个统一的存储库,我可以在其中 pull/推送 checkin ,这样就没有更多的存储库 B,最后只有存储库 A。

最佳答案

我想你是这样做的:

  1. git 远程添加 [repo b]
  2. git fetch//获取repo b到repo a中
  3. 由于您想保留这样的历史记录:A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(来自 repo B)-HEAD(新 repo A)您可以先选择 A0 作为起点,然后使用 git cherry-pick 一个一个地选择。

希望对你有用。

Br,蒂姆

关于git - 如何将两个独立的不相关的 Git 存储库 merge 为一个具有单一历史时间轴的存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9781729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com