不小心分支出了错误的分支,当我想合并到主分支时,我必须合并两个分支

Posted

技术标签:

【中文标题】不小心分支出了错误的分支,当我想合并到主分支时,我必须合并两个分支【英文标题】:Accidentally branched off of the wrong branch, and when I want to merge into the master I have to merge both branches 【发布时间】:2014-03-15 09:10:25 【问题描述】:

所以我从我已经创建的另一个分支创建了一个分支,现在当我尝试将分支合并到 master 时,我遇到了必须合并两个分支的情况。

这是一个图表

大师->

 ->Branch 1  -> Branch 2

我希望能够仅将分支 2 上的更改合并到 master 上,而无需合并分支 1 上的更改(如果有意义的话)。我查看了重置和恢复,但似乎这些东西会删除我对分支 2 所做的所有更改。有什么想法吗?

谢谢

【问题讨论】:

假设你的意思是git,你想要git rebase --onto 【参考方案1】:

使用以下语法尝试 git rebase --onto:

将 branch2 的更改放在 master 上,而不包括 branch1 的

git rebase --onto master branch1 branch2

来自git help rebase的相关输出:

以下是如何将基于一个分支的主题分支移植到另一个分支,以 假设您使用 rebase --onto 从后一个分支中分出了主题分支。

首先让我们假设你的 topic 基于分支 next。例如,一个特征 topic 中的开发依赖于 next 中的某些功能。

              o---o---o---o---o  master
                   \
                    o---o---o---o---o  next
                                     \
                                      o---o---o  topic

我们想让 topic 从分支 master 分叉出来;例如,因为功能 topic 所依赖的被合并到更稳定的 master 分支中。 我们希望我们的树看起来像这样:

              o---o---o---o---o  master
                  |            \
                  |             o'--o'--o'  topic
                   \
                    o---o---o---o---o  next

我们可以使用以下命令来获取:

git rebase --onto master next topic

请记住这里提到的变基的风险和陷阱: http://git-scm.com/book/en/Git-Branching-Rebasing

【讨论】:

我来这里是因为我做了和 OP 一样的事情。 IE。我不小心将我的本地功能/功能 1 分支为功能/功能 2。并且应该将开发标记为 features/feature2。看起来 rebase --onto 会做我想做的事,但是我应该在运行 rebase 之前检查三个分支之一吗?我想我需要先提交对 features/feature2 的更改??【参考方案2】:

一种方法是使用cherry-pick。执行git log branch2 并找到您想要的提交ID,然后使用git checkout master 切换到master 分支,然后使用git cherry-pick <commit_id>

更多详情请参考这篇文章

How to merge a specific commit in Git

【讨论】:

以上是关于不小心分支出了错误的分支,当我想合并到主分支时,我必须合并两个分支的主要内容,如果未能解决你的问题,请参考以下文章

Git:合并到主文件,同时自动选择用分支覆盖主文件

Github:当特定分支合并到主分支时,我如何通知松弛?

预测特征分支在主分支中合并时的合并冲突。

将 git repo 分支(具有不同的历史记录)合并到主分支 [重复]

Git:如何使用 VS Code 源代码控制将功能分支合并到主分支?

git提交时,新建分支,提交内容,再合并到主分支