小编典典

Git 将修补程序分支合并到功能分支中

all

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

  1. 创建的存储库:

    mkdir GitTest2
    

    cd GitTest2
    git init

  2. master 中的一些修改发生并被提交:

    echo "On Master" > file
    

    git commit -a -m “Initial commit”

  3. Feature1 分支了 master 并完成了一些工作:

    git branch feature1
    

    git checkout feature1
    echo “Feature1” > featureFile
    git commit -a -m “Commit for feature1”

  4. 同时,在master-code中发现了一个bug,并建立了一个hotfix-branch:

    git checkout master
    

    git branch hotfix1
    git checkout hotfix1

  5. 该错误已在 hotfix 分支中修复并合并回主分支(可能在拉取请求/代码审查之后):

    echo "Bugfix" > bugfixFile
    

    git commit -a -m “Bugfix Commit”
    git checkout master
    git merge –no-ff hotfix1

  6. feature1 的开发仍在继续:

    git checkout feature1
    

假设我需要在我的功能分支中进行修补程序,可能是因为该错误也发生在那里。如何在不将提交复制到我的功能分支中的情况下实现这一点?

我想防止在我的功能分支上获得两个与功能实现无关的新提交。如果我使用拉取请求,这对我来说尤其重要:所有这些提交也将包含在拉取请求中并且必须进行审查,尽管这已经完成(因为修补程序已经在主服务器中)。

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


阅读 94

收藏
2022-02-25

共1个答案

小编典典

我们如何将 master 分支合并到 feature 分支中?简单:

git checkout feature1
git merge master

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

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

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

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

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

所以真正的答案是:

git checkout feature1
git merge --no-ff hotfix1

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

变基时要非常小心。仅当您所做的更改保留在您的存储库本地时才重新设置基准,例如您没有将任何分支推送到其他存储库。变基是一个很好的工具,可以让您在将本地提交发布到世界之前将其安排成有用的顺序,但是之后的变基对于像您这样的
git 初学者来说会搞砸事情。

2022-02-25