不久前,我为一个项目创建了一个私有(private) git 存储库,并开发了一种为每个主要版本发布创建维护分支的模式。
在项目中几个月后,我现在有许多旧版本的分支,这些分支不再受到任何形式的支持。我已经意识到这是一种处理问题的凌乱方式。作为一个更整洁的替代方案,我想维护一个开发分支和一个发布分支,而不是单个版本的标签。
理想情况下,我想将当前存储库转换为这种新格式。我想在发布提交和 master 上提交之间的关系方面尽可能多地保留提交历史,但我想将所有发布分支转换为一个单独的发布分支。
该存储库仅供我使用,因此我可以使用 git rebase --onto
轻松地将一个分支的内容粘贴到另一个分支的末尾。 -- 我不关心在这里保留确切的提交哈希。
我关心的是保留与主分支的 merge 历史。我想重新创建每个分支的根提交,以便基于前一个分支的提示以及它最初从 master 分支的提交 - 将其转换为 merge 提交。
然后我想保留 master 和那个分支之间的一些其他 merge ,这些 merge 发生在链的更上游。
我尝试了一些类似 git rebase --onto branchB-divergence...branchA-tip branchB
的方法(以及几个变体,包括尝试 -m 和 -i,同时浏览文档)
结果要么是意外地在 master 上复制了很多提交,并丢失了 merge 历史记录,要么不断出现需要解决的 merge 冲突。
我想要实现的目标甚至可能实现吗?我将遵循什么样的程序来重新设置这样的一系列提交?
最佳答案
不要那样做。为什么不创建一个 --orphan
'LifeSupport' 的分支,它只是一个最后的安息之地,然后将每个死分支 merge 到它上面( merge 策略 --ours
),然后为每个最后的生命支持提交添加一个标签,并使用相应的版本号.这样你就可以删除旧的分支引用,并且仍然能够恢复到它们的旧版本。
或者使用 grafts
或 replace
(Are grafts deprecated?)将旧的分支系列加入您指定的链中。然后可以通过 filter-branch
将它们卡住。 .
关于git - 重新父级 git commit 以拥有两个父级, merge 多个分支,并保留 future 的 merge 历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16916550/