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

Aam*_*wan 3 git github git-bash github-enterprise

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

第1步:

git fetch origin
git checkout -b feature-branch origin/feature-branch
git merge development
Run Code Online (Sandbox Code Playgroud)

第2步:

git checkout development
git merge --no-ff feature-branch
git push origin development
Run Code Online (Sandbox Code Playgroud)

为什么git merge development需要?

Tim*_*sen 6

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

development: -- A -- B -- C -- D
                      \
feature:               E -- F
Run Code Online (Sandbox Code Playgroud)

在这里,你从支developmentB承诺,自那以后你做了一个F承诺,和其他人(甚至你也一样)已经取得CD提交到远程development分支。您的两个步骤中的第一个是合并development到您的功能分支中:

development: -- A -- B -- C -- D
                      \         \
feature:               E -- F -- M1
Run Code Online (Sandbox Code Playgroud)

现在你有一个M1合并本地提交,和你的分支应该是完全更新与任何远程进来的CD提交。现在您可以将您的功能分支合并到 中development,剩下:

development: -- A -- B -- C -- D -- M2
                      \         \  /
feature:               E -- F -- M1
Run Code Online (Sandbox Code Playgroud)

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