【问题标题】:What is the difference between merging master into branch and merging branch into master?将master合并到分支和将分支合并到master有什么区别?
【发布时间】:2014-10-15 13:44:06
【问题描述】:

我有一个名为 master 的分支和另一个名为 dev 的分支。通常,我对dev 进行测试和改进;完成后,我将它合并到master,标记它,然后发布新版本的应用程序。

现在,我面临着关于合并的决定:

  1. master 合并到dev
  2. dev 合并到master

但我不确定这两者有何不同...欢迎任何解释。

【问题讨论】:

  • 将一个分支合并到另一个分支不是对称操作;将master 合并到dev 不同于将dev 合并到master。按照这个例子,区别应该会变得清晰:stackoverflow.com/questions/25933056/…
  • 使用merge master,您推进dev 分支。
  • GIT 中的 master 分支是一个通用名称,这意味着这是一个在 SVN 中用作 TRUNK 的 MAIN 分支,您可以将您的 Dev 标记为您的 master 分支,但反之亦然,每次您需要开始新的开发迭代你需要使用 master 创建新的分支,当你完成这个迭代时,你还需要将你的更改合并或 rebase 到 master 分支,你的 Dev 只是你开发周期中的迭代之一

标签: git merge


【解决方案1】:

TL;DR

主要区别在于masterdev 分支最终指向的位置。

完整解释

将一个分支合并到另一个分支不是对称操作:

  • dev 合并到master,然后
  • master 合并到dev

一般来说,是不等价的。这是一个说明性示例,解释了两者之间的区别。假设您的仓库如下所示:

如果你将dev 合并到master

如果 master 已签出 (git checkout master),

然后你合并devgit merge dev),你最终会出现以下情况:

master 分支现在指向新的合并提交 (F),而 dev 仍指向与合并前相同的提交 (E)。

如果你将master 合并到dev

另一方面,如果 dev 已签出 (git checkout dev),

然后你合并mastergit merge master),你最终会出现以下情况:

dev 分支现在指向新的合并提交(F',而master 仍然指向与合并之前相同的提交(D)。

把它们放在一起

【讨论】:

  • 所以“非对称”是指合并后分支指针指向不同的提交?因为恕我直言,提交 F 和 F' 应该是相同的(内容方面,不一定是 SHA-1 方面)。
  • @musiKk 是的,这就是我的意思。我为FF' 使用了不同的名称,因为F' 是来自平行宇宙的F 的邪恶双胞胎,并且与F 的SHA1 不同。
  • 好的!顺便说一句,你用什么来绘制光滑的图像?它们看起来很像 Pro Git 中的图像......
  • @Jubobs - 我知道你稍微对冲你的附录,但你可能想明确指出父母在这两种情况下是相反的。
  • 我想补充一点,在某些项目中,选择合适的“第一父”(接收合并的分支)是一个政策问题:某些分支可能“有幸”只接收合并(例如,功能分支)并且不会合并到其他分支。 Git 甚至在其git log 命令(及其朋友)中支持--first-parent 命令行选项;在git log 手册页中阅读它可以对您的问题有所了解,@sop。
猜你喜欢
  • 2016-04-30
  • 2016-09-20
  • 2018-04-14
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
相关资源
最近更新 更多