将主人合并到功能分支

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

  • 创建的存储库:

    mkdir GitTest2
    cd GitTest2
    git init
    
  • 主人的一些修改发生并得到承诺。

    echo "On Master" > file
    git commit -a -m "Initial commit"
    
  • Feature1分出主,并完成一些工作:

    git branch feature1
    git checkout feature1
    echo "Feature1" > featureFile
    git commit -a -m "Commit for feature1"
    
  • 同时,在主代码中发现了一个错误,并建立了一个修补程序分支

    git checkout master
    git branch hotfix1
    git checkout hotfix1
    
  • 该错误在修补程序分支中得到解决,并被合并回主服务器(可能在拉请求/代码检查之后):

    echo "Bugfix" > bugfixFile
    git commit -a -m "Bugfix Commit"
    git checkout master
    git merge --no-ff hotfix1
    
  • feature1的开发仍在继续:

    git checkout feature1
    
  • 现在我的问题:说我需要我的功能分支中的修补程序,也许是因为该错误也发生在那里。 如何在不将提交复制到我的特性分支的情况下实现这一点? 我想阻止在功能分支上获得两个与功能实现无关的新提交。 如果我使用合并请求,这对我来说尤其重要:所有这些提交也将包含在合并请求中,并且必须进行审查,尽管这已经完成(因为修补程序已经在主服务器中)。

    我不能做一个git merge master --ff-only :“致命的:不可能快进,放弃。”,但我不确定这是否对我有帮助。


    你应该可以重新绑定你的分支:

    git checkout feature1
    git rebase master
    

    管理出现的所有冲突。 当你到达提交错误修正(已经在master)时,git会说没有改变,可能它们已经被应用了。 然后,您继续使用rebase(同时跳过master中的提交)

    git rebase --skip
    

    如果您在功能分支上执行git log ,您会看到错误修复提交只出现一次,并在主控部分中出现。

    有关更详细的讨论,请查看关于git rebase (https://git-scm.com/docs/git-rebase)的Git book文档,其中涵盖了这个确切的用例。


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

    git checkout feature1
    git merge master
    

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

    看看gitflow。 这是一个可以遵循的git的分支模型,而你在不知不觉中已经做到了。 它也是git的一个扩展,它为新的工作流程步骤添加了一些命令,这些步骤可以自动执行,否则您需要手动执行。

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

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

    gitflow模型会要求您将修补程序也合并到devel分支,在您的案例中它是“feature1”。

    所以真正的答案是:

    git checkout feature1
    git merge --no-ff hotfix1
    

    这将修补程序内部所做的所有更改添加到功能分支,但只有这些更改。 它们可能会与分支中的其他开发更改发生冲突,但是如果您最终将功能分支合并到主分支,它们不会与主分支发生冲突。

    请仔细检查rebasing。 如果您所做的更改保留在您的存储库的本地,则只有重定位,例如,您没有将任何分支推送到某个其他存储库。 在您将本地提交排入世界之前,重新配置是一个很好的工具,可以让您将本地提交安排到一个有用的顺序中,但之后的重新发布会让像您这样的git初学者陷入困境。


    基于这篇文章,你应该:

  • 创建基于新版本的master的新分支
  • 将旧的功能分支合并到新的功能分支中
  • 解决新功能分支上的冲突
  • 这样你的历史保持清晰,因为你不需要重新合并。 你不需要非常谨慎,因为你不需要git rebase

    链接地址: http://www.djcxy.com/p/45057.html

    上一篇: Git merge master into feature branch

    下一篇: When would you use the different git merge strategies?