首页 > 解决方案 > 如何在 Git 存储库中合并两个并行分支?

问题描述

我有一个没有Git存储库的项目,所以我在Gitlab. 在创建 repo 时,我有两个文件夹,一个包含生产代码,一个包含开发代码。

git我在包含生产代码的文件夹中创建了一个本地存储库。我将代码推送到我最初创建的存储库的远程master

git然后我在包含开发代码的文件夹中创建了一个本地存储库。我从本地 master 创建了一个新的本地分支(比如说 xyz)。我将这个新的本地分支推xyz送到同一个远程存储库。

远程存储库现在有master分支和xyz分支。现在,我想在完成开发后将xyz分支合并到。master

但是当我试图变得过于聪明时,我在同一个存储库中有两个具有不相关历史的平行分支。一种解决方案可能是删除存储库并使用我刚刚完成的新代码重新开始,但是有没有办法保留旧代码并合并这些分支?

标签: gitgitlabgit-merge

解决方案


如果我理解正确,您在最后一个生产环境中的 master 中有一个修订版(或者可能是多个修订版,没关系)......那么您有一个与 master 平行的分支,从第一个修订版开始大师的延续。是对的吗?因此,如果我们能够将 xyz 的第一个(最旧的)修订版(该修订版的内容)放在 master 之上,然后在 xyz 的第一个修订版之后重放所有其他修订版,您会很高兴吧?

好的......如果是这样的话:

git checkout first-revision-xyz # check out the first revision of xyz
git reset --soft master # set the branch pointer on top of the current position of master (master won't be touched, don't worry)
git commit -m "taking back content to how it is on the first revision of xyz" # create a new revision, set appropriate comment
git cherry-pick first-revision-of-xyz..xyz # replay all the other revisions up to the last revision of xyz
# if you like the result
git checkout -b development

在那里你创建了分支开发,它跟随 master,然后你可以像往常一样开始使用它。

作为一种不同的策略,您可能希望合并两个分支但保持树(文件和内容)在 xyz 上的样子?这可以在不经过真正的合并过程的情况下完成。

git checkout -b test $( git commit-tree -p master -p xyz -m "Merge of prod an development" ${xyz^tree} )

Created a test branch that has the merge of both branches keeping the tree as it is on xyz.

推荐阅读