假设我有一个A->B->C
(master
)分支和A->B->D->E->F
(develop
)分支。
将develop
合并到master
后,会创建一个新的合并提交,比如说G
,所以master现在看起来像A->B->C->G
(master)。 G
作为合并提交有两个父项C
(主)和F
(开发)。
在合并操作之后,所有临时提交(即D->E->F
)现在都是master
的一部分吗?
我认为自从D
或E
或F
可以从合并的提交G
到达,这肯定是master
的一部分,但是我我不确定。有人可以证实或澄清这个吗?
答案 0 :(得分:3)
我想知道所有关于开发的临时提交,即
D->E->F
现在在概念上是合并操作后master
的一部分吗?恕我直言,是的,因为
D
或E
或F
可以从合并的提交G
到达,这肯定是master
的一部分
这完全正确。
您可以asking Git to list the branches that contain a given commit验证这一点,例如
git branch --contains D
答案 1 :(得分:2)
是的,这是Git打算使用的一种方式。
请注意,如果需要,您可以使用单个组合提交(不同的提交)有效地替换 develop
上的三个提交。您只能在master
上进行组合提交,然后完全丢弃分支develop
,以便没有人使用原始的三次提交。 git merge --squash
命令允许您分两步完成此操作:执行squash-merge(不是真正的合并),然后删除develop
分支。请注意,其他任何尝试使用develop
的人都必须考虑到这一点:他们可能也必须删除自己的develop
分支。
或者,您可以git reset
离开develop
上的三个提交,支持您制作的新合并提交,并将其放在develop
的重绕提示上。如果愿意,您可以正常合并。 git rebase -i
(交互式rebase)命令对此特定工作流程很有用。请注意,再次尝试使用develop
的任何其他人都必须考虑到这一点:如果他们在原来的三个提交中构建了提交,那么您将使用组合的单个提交替换,他们将需要执行他们的操作自己的变基。
还有很多其他选择。每个都有各种优点和缺点; Git可以让你做任何你最喜欢的事情。但是你在问题中提出的那个是Git最简单,最简单的一个,而且它通常是一个不错的选择。