为什么在合并拉取请求时需要将开发分支合并到功能分支?

Why merging development branch to feature-branch is required when merging a pull request?

我想将来自我的功能分支的 GitHub 拉取请求合并到开发中。以下是 GitHub 通过命令行执行此操作的说明:

第 1 步:

git fetch origin
git checkout -b feature-branch origin/feature-branch
git merge development

第 2 步:

git checkout development
git merge --no-ff feature-branch
git push origin development

为什么需要 git merge development

这里的问题是,从您最初从 development 创建功能分支的那一刻起,您 其他人可能已经提交了该功能并且development 个分支,分别。图表在这里会有所帮助:

development: -- A -- B -- C -- D
                      \
feature:               E -- F

在这里,您在 B 提交时从 development 分支,从那时起您进行了 F 提交,其他人(甚至可能是您)已经进行了 CD 提交到远程 development 分支。您的两个步骤中的第一步是将 development 合并到您的功能分支中:

development: -- A -- B -- C -- D
                      \         \
feature:               E -- F -- M1

现在您在本地有一个 M1 合并提交,并且您的分支应该与 CD 提交中远程传入的任何内容完全同步。现在您可以将您的功能分支合并到 development,留下:

development: -- A -- B -- C -- D -- M2
                      \         \  /
feature:               E -- F -- M1

至于为什么需要这两个步骤,第一步确保您的本地功能分支与远程 development 自您最初创建分支以来发生的任何事情都是最新的。至少在某些时候,不执行此步骤将意味着合并将以一些冲突告终。 GitHub 检测到这一点,如果您不是最新的,通常会拒绝合并。第二步可能是您所期望的,只是将您的功能分支实际合并到 development.