首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Git将修补程序分支合并为特征分支

Git将修补程序分支合并为特征分支
EN

Stack Overflow用户
提问于 2013-06-06 07:18:57
回答 11查看 1.9M关注 0票数 1.3K

假设我们在Git中有以下情况:

  1. 创建的存储库: mkdir GitTest2 cd GitTest2 git init
  2. 在主服务器中进行了一些修改并提交了以下内容: 回显"On“>文件git提交-a -m”初始提交“
  3. Feature1从母版中分离出来,并完成了一些工作: git分支feature1 git签出feature1 echo "Feature1“> featureFile git提交-a -m”提交feature1“
  4. 同时,在主代码中发现了一个bug,并建立了一个修复分支: git结帐主git分支hotfix1 git签出hotfix1
  5. 错误在hotfix分支中修复,并合并回主服务器(可能是在进行了拉请求/代码评审之后): 回显"Bugfix“> bugfixFile git提交-a -m "Bugfix提交”git签出主git合并-no-ff hotfix1
  6. feature1的发展仍在继续: git结帐feature1

假设我需要我的特性分支中的修补程序,也许是因为bug也发生在那里。如何在不将提交复制到特性分支的情况下实现这一点?

我想防止在我的特性分支上得到两个与特性实现无关的新提交。这对我来说特别重要,如果我使用拉请求:所有这些提交也将包括在拉请求中,并且必须被检查,尽管这已经完成了(因为修复程序已经在主程序中)。

我不能做git merge master --ff-only:“致命:不可能快速转发,中止”,但我不确定这是否对我有帮助。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-06-06 08:42:35

如何将主分支合并到功能分支中?简单:

代码语言:javascript
运行
复制
git checkout feature1
git merge master

在这里强制快速推进合并是没有意义的,因为这是无法完成的。您同时提交了特性分支和主分支。快进现在是不可能的。

看看GitFlow。这是一个可以遵循的git分支模型,而且您已经无意识地这样做了。它也是Git的一个扩展,它为新的工作流步骤添加了一些命令,这些步骤可以自动执行,否则需要手动执行。

那么你在工作流程中做了什么呢?您有两个分支可以使用,您的feature1分支基本上是GitFlow模型中的“开发”分支。

您从master创建了一个修补程序分支,并将其合并回来。现在你被困住了。

GitFlow模型要求您将修补程序合并到开发分支,在您的情况下,开发分支是"feature1“。

所以真正的答案是:

代码语言:javascript
运行
复制
git checkout feature1
git merge --no-ff hotfix1

这将将在修复程序中进行的所有更改添加到功能分支,但只添加这些更改。它们可能与分支中的其他开发更改发生冲突,但如果您最终将特性分支合并回master,则不会与主分支发生冲突。

重新部署时要非常小心。只有当更改保持在存储库的本地,例如,您没有将任何分支推到其他存储库时,才会进行重基。重新定位是一个很好的工具,你可以把你的本地提交安排成一个有用的顺序,然后再把它推到世界上去,但是之后重新定位会给像你这样的初学者带来麻烦。

票数 1.6K
EN

Stack Overflow用户

发布于 2013-06-06 07:24:07

你应该能够在师父的基础上重新建立你的分支:

代码语言:javascript
运行
复制
git checkout feature1
git rebase master

处理所有出现的冲突。当您使用错误修复(已经在主版中)进行提交时,Git会说没有发生任何更改,并且可能已经应用了它们。然后继续重基(同时跳过已在master中的提交)。

代码语言:javascript
运行
复制
git rebase --skip

如果您在特性分支上执行git log,您将看到错误修复提交只出现一次,并且出现在主部分中。

要获得更详细的讨论,请查看关于git rebase (https://git-scm.com/docs/git-rebase)的Git图书文档,该文档涵盖了这个精确的用例。

用于附加上下文的================编辑====================

这一答复是针对@theomega提出的问题提供的,考虑到了他的特殊情况。注:本部:

我想阻止..。在与特性实现无关的特性分支上提交。

把他的私人分支重新建立在师父的基础上,才会产生这样的结果。相反,将主从合并到他的分支中,将精确地完成他特别不希望发生的事情:添加一个与他通过分支正在处理的特性实现无关的提交。

要针对阅读问题标题的用户,跳过问题的实际内容和上下文,然后只盲目地阅读顶部的答案,假设它总是适用于他们(不同的)用例,请允许我详细说明:

  • 仅重基私有分支(即只存在于本地存储库中且未与他人共享的分支)。重新设置共享分支将“破坏”其他人可能拥有的副本。
  • 如果希望将从分支(无论是主分支还是其他分支)的更改集成到公共分支(例如,您已经按下分支来打开拉请求,但现在与主分支存在冲突,需要更新分支以解决这些冲突),则需要将它们合并到其中(如@Sven的答案中的git merge master )。
  • 如果您喜欢这样的话,您也可以将分支合并到本地私有分支中,但是要注意,它将导致分支中的"foreign“提交。

最后,如果你不满意这个答案并不适合你的情况,即使它是对@theomega,在下面添加一个评论不会特别有帮助:我不控制选择哪个答案,只有@theomega。

票数 664
EN

Stack Overflow用户

发布于 2019-11-12 07:38:49

git merge

您可以按照以下步骤操作

1.将origin/master分支合并到feature分支

代码语言:javascript
运行
复制
# step1: change branch to master, and pull to update all commits
$ git checkout master
$ git pull

# step2: change branch to target, and pull to update commits
$ git checkout feature
$ git pull

# step3: merge master to feature(⚠️ current is feature branch)
$ git merge master

2.将feature分支合并到origin/master分支

origin/master是远程主分支,而master是本地主分支。

代码语言:javascript
运行
复制
$ git checkout master
$ git pull origin/master

$ git merge feature
$ git push origin/master
票数 88
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16955980

复制
相关文章

相似问题

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