什么是反向合并

What is a back-merge

我看过一些关于 git-flow 脚本的视频,出现的一个术语是“反向合并”——例如hotfix 合并到 master 并返回合并到 develop.

我假设反向合并是一个概念,而不是本机 git 命令。哪些确切的命令构成反向合并操作?

只是两个普通的合并命令:

git checkout master
git merge hotfix
git checkout develop
git merge hotfix

您可以认为 "normal" 提交流程是在工作完成时从您的开发分支到 master。在反向合并中,提交流向相反的方向,从 hotfix 你的开发分支。

术语 "back merge" 的使用通常有些随意。

它只是意味着像其他任何操作一样进行合并,但与分支约定的正常流程相比,方向 "backwards"。如果你想象像

这样排列的分支
master    hotfix    release    dev    feature
  |          |         |        |         |
  |          |         |        |         |
  |          |         |        |         |
  |          |         |        |         |

然后 "flow" 从右到左正常更改 - 从开发到发布到主控的特性。但是,尽管修补程序非常靠左——它们是从 master 创建的——它们仍然必须合并 "to the right" 到 dev,所以有些人将其描述为向后合并,或 back-merging.

在我看来,这不是该术语最引人注目的用法,因为它可以理解为暗示相反的合并(从 dev 到修补程序分支)是 "forward merge" - 但事实上那是不应该做的事情。在这种情况下,如果您以上述特定方式可视化分支,则 "backward" 的方向更多地是关于更改的一般流程。

当你有一个 long-lived 功能分支时(它本身是可能使用 gitflow 的敏捷流程中的 anti-pattern 的某种东西;但有时你可能需要一个)。在这种情况下,您应该定期从 dev 更新您的 long-lived 功能,这样两者就不会偏离太多导致以后合并冲突的灾难。 (这打开了一大堆关于 "unnecessary" 合并的蠕虫,什么造就了一段美好的历史,以及 git rerere... 但我离题了。)That 可以显然被称为 back-merge 因为相反 - 将您的功能合并到 dev - 是分支模型中合并的正常教科书使用。

Backmerge 只是 将您的修补程序更改添加到您当前的工作分支。

假设您有两个分支 DevelopMaster
您在 Master 上发现了任何重大错误。 您将其作为 hotfix 修复在 Master 分支上。 稍后您需要将错误修复更改添加到 当前工作分支 即开发分支。 所以你需要像这样 back-merge


  1. git结帐开发
  2. git合并大师
  3. git push origin Develop