答案 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。