我有两个我想要合并的存储库。让我们称之为旧式和新式。我的团队在2016年12月31日停止使用旧式,并于2017年1月1日开始使用新式。目录/项目样式从旧式复制并移至新式但历史记录除外。我想将这两个历史合并在一起,这样我就可以看到项目中发生了哪些变化。
我该怎么做?很多博客建议采用旧式,并将其作为新式的儿童目录,然后合并其无关的历史。但我相信我的历史是相关的。这样做会使代码库看起来不相似。
old-style: c1--c2--c3--c4--c5 <- master
January 1 2017
new-style: c1--c2--c3--c4--c5--c6-- <- master
如果我将old-style作为new-style的子目录,我将不得不进行提交,指示在某个时刻发生了合并。
old-style: c1--c2--c3--c4--c5 <- master
January 1 2017 \
new-style: c1'--c2'--c3'--c4'--c5'--c6'--c7 <- master
message at c7 indicating that old-style was added to new-style
理想的输出是什么
c1--c2--c3--c4--c5--c1'--c2'--c3'--c4'--c5'--c6'--c7-- <- master
您理想的情境图描述了一个rebase,您可以这样做。如果将这两个存储库作为分支,则可以运行git rebase --root --onto old-style new-style
,这将生成线性历史记录。
如果--rebase-merges
是一个主要开发分支,使用典型的合并工作流来保留合并提交而不是省略它们,您可能还想使用new-style
。这需要一个合理的Git版本。
如果你真的想使用合并,你需要与--allow-unrelated-histories
合并,因为分支在共享代码时不共享实际的公共提交。