首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将主分支合并到特征分支中,特征分支也有基于特征分支的子分支

将主分支合并到特征分支中,特征分支也有基于特征分支的子分支
EN

Stack Overflow用户
提问于 2021-09-23 07:16:06
回答 3查看 516关注 0票数 1

我有一个功能-分支,这是从主人前一段时间。现在,主分支有了先进的功能-分支在其上有许多子分支。我希望将所有新的更改从主分支放入到我的功能分支中,并且不应干扰功能分支的任何现有的子分支。

如果我在主分支上重新设置特征分支的基础,那么所有在特征分支上的子分支都会被搁浅(基于我之前的经验)。

请让我知道我们如何处理这件事。

EN

回答 3

Stack Overflow用户

发布于 2021-09-23 08:38:20

我将主分支合并到我的feature-分支中,并解决了冲突。

代码语言:javascript
复制
git checkout master
git pull
git checkout feature-branch
git merge master

这没有打乱我的feature-branch的现有子分支中的任何评论历史。

我确实在feature-branch上重定了子分支的基础(带有最新的更改),一切看起来都很好。

票数 2
EN

Stack Overflow用户

发布于 2021-09-23 11:32:25

让我们试着用几个通用的插图来回答这个问题,因为我们不确切地知道你的具体情况是什么样子的。首先,让我们就mergerebase的不同之处达成一致,然后再看你所要求的情况,其中多个功能分支基于彼此。

正如您可能知道的那样,merge保留历史记录,而rebase重写历史记录。不同之处可以在上面的插图中看到。

现在,让我们用一个类似的插图来回答您最初的问题;其中两个feature分支(feature-1和feature-2)是基于彼此的,并且当前在master之后。

无论您决定如何将主文件中的更改集成到feature-1 (mergerebase)中,feature-2将保持原样(即,没有新集成的主文件到feature-1中的更改)。如果您想要将所有更改集成到feature-2中,您将再次选择合并或重新建立基础。

如果您决定将feature-2重新设置为feature-1的基础(初始主集成后),Git将计算出提交ol42g09qr2已经存在,并因此自动从重新设置基础的feature-2版本中剥离这些补丁。

警告:重新设置已经发布的分支的基础可能会给您的团队成员带来麻烦,因此如果是这样的话,请确保保持紧密的对话。为了安全起见,不要对已经公开的分支进行基址调整。

希望现在应该清楚你的选择是什么。=)

票数 1
EN

Stack Overflow用户

发布于 2021-09-23 16:34:17

我大体上同意这样的说法:

如果我在主分支上重新设置特征分支的基址,那么所有在特征分支上的子分支都将被搁浅(基于我之前的经验)。

为了防止这个问题,显而易见的解决方案是将最新的master合并到feature-branch中,BTW不需要master的本地副本,因为您可以使用远程(通常称为origin):

代码语言:javascript
复制
git switch feature-branch # if not already checked out
git fetch
git merge origin/master

然而,OP也有added an answer,它包含一些新的信息:

我确实在feature-branch上重定了子分支的基础(带有最新的更改),一切看起来都很好。

如果你愿意改变所有子分支的基础,这意味着你仍然可以将feature-branch基础转移到master上,如果你更喜欢合并的话。如果使用rebase,则只需跟踪feature-branch的旧提交,然后再将其重新设置为最新的master

代码语言:javascript
复制
git switch feature-branch # if not already checked out
git branch feature-branch-old -f # -f is explained below
git fetch
git rebase origin/master
# and now for each sub-branch:
git switch sub-branch1
git rebase --onto feature-branch feature-branch-old

注意,这里的主要区别是对于每个子分支,而不是基本的rebase:git rebase feature-branch,您只需要执行一个“花哨的”rebase来更改起点。

一旦所有子分支都重新建立了基础,您就可以删除分支feature-branch-old。但是,如果您计划通过基于origin/master的未来版本来继续更新feature-branch,那么您不妨保留它,直到feature-branch不复存在。如果这样做,您只需根据需要重复上述步骤即可。这就是我在创建feature-branch-old时使用-f的原因。如果现有分支存在,-f将强制覆盖该分支,如果您重复上述步骤,则将需要该分支。

如果你通常更喜欢rebase而不是merge,我会倾向于这种策略,因为从长远来看,它几乎不需要更多的工作,而且更干净。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69295492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档