如何在 Git 存储库中合并两个并行分支?

How to merge two parallel branches in a Git repository?

我有一个没有 Git 存储库的项目,因此我在 Gitlab 中为其创建了一个。在创建 repo 时,我有两个文件夹,一个包含生产代码,一个包含开发代码。

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

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

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

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

如果我理解正确,你在上一个生产环境中有一个 master 版本(或者它可能有很多版本,没关系)......那么你有一个与 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

至此你创建了branch 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.