将dev分支合并为主VS合并主机到dev

时间:2018-03-23 19:36:34

标签: git merge

如果我将master合并到dev中,接下来要做什么,我会感到困惑。我应该再次将dev合并到master中吗?在那种情况下,主人只是简单地移动到F'合并提交? enter image description here

1 个答案:

答案 0 :(得分:0)

合并大师 - > dev - > master与dev不完全相同 - >主人 - >开发。这些差异很微妙,不太可能影响您的代码,但在查看历史记录或还原合并时可能会出现问题。

首先,以下是来自git(使用git log --graph --oneline --decorate --branches)的一些输出,用于说明这些情况。

合并之前:

* 4da7550 (dev) E
* d80d7a8 D
| * 5a5dde8 (HEAD -> master) C
| * 880a096 B
|/  
* 59903a3 A

将dev合并为master,然后将master合并到dev:

*   88bda7a (HEAD -> dev, master) Merge branch 'dev'
|\  
| * 4da7550 E
| * d80d7a8 D
* | 5a5dde8 C
* | 880a096 B
|/  
* 59903a3 A

将master合并到dev中,然后将dev合并为master:

*   e0ef175 (HEAD -> master, dev) Merge branch 'master' into dev
|\  
| * 5a5dde8 C
| * 880a096 B
* | 4da7550 E
* | d80d7a8 D
|/  
* 59903a3 A

这里的主要区别是每个场景中的提交都是相反的。在第一种情况下,主分支在左侧,dev分支在右侧。在第二种情况下,它是相反的。

为什么会这样?

当您将一个分支合并到另一个分支时,git会创建一个包含两个父提交的提交。第一个父级将是您所在的当前分支,第二个父级将是要合并的分支。

当我们首先将master合并到dev中时,dev分支是父级1.当我们首先将dev合并为master时,master是父级1。

重要吗?

不是特别,只要你知道它。这通常不是问题,不会影响代码。它确实使你的git历史记录更难阅读,因为在第二种情况下我们在右边有master,使它看起来好像dev是基本分支。

唯一的实际区别在于,如果您以后决定犯了错误并希望恢复开发分支更改,那么您的命令将会发生变化。

如果我先将master合并到dev中,我会输入:

git revert -m 2 <merge commit ref>

如果我先将dev合并为master,我会输入:

git revert -m 1 <merge commit ref>

-m <n>告诉Git恢复提交,并保留 n 父级

避免这种情况的一种方法是使用--no-ff在合并到母版时避免快进。这将创建另一个合并提交,父级按正常顺序。

除非您特别需要master中的更改才能继续工作,否则根本不需要将master合并到dev中。在这种情况下,您还希望在dev分支上进一步提交,而不是立即将其合并回master。