【发布时间】:2012-03-01 21:11:01
【问题描述】:
在 svn 中,我可以通过像这样指定修订号来从分支合并到主干
trunk>svn merge -r r1:r2 <branch>
但是,在 git 中,似乎合并始终是重新集成合并,它将分支收敛到主干。因此,之后如果再次合并,则更改将不会基于上一次合并发生的点。
B--C----E----F-----G --> origin/dev
/ \ \
/ \ \
A--------D---------------H------- origin/master
所以,当第一次在 D 处从 dev 合并到 master 时,它肯定是正确的。但是第二次从 G 合并回 H 时,合并的比较点基于 C 而不是 D,因为 D 处的合并最初是重新合并合并,我遇到了一些冲突!
那么,如何在 Git 中进行连续合并?
【问题讨论】:
-
我不明白你的问题。在第二次合并中无需将提交 B 和 C 合并回 master,它们已经应用于 master。第二次合并只需要合并E、F和G即可。总有合并冲突的可能,这取决于两个分支的变化是什么。
-
e,f,g如何合并,用什么命令?
-
您结帐大师,确保它与 origin/master 是最新的,然后只需执行
git merge origin/dev。然后,如果您对合并感到满意,您只需使用git push origin master将其推送到原点。 -
为什么第二次可能包含冲突?这是没有意义的,因为在第一次合并后没有向 master 提交任何更改。你所做的正是我所做的,但是,它会导致冲突。这就是为什么我猜 git 不做连续合并的原因。
-
即使在 D 之后没有对
origin/master的非合并提交,那么在origin/dev中合并仍然存在冲突,因为提交 E-G 可能会触及 C 和 D 之间不同的文件,因为它们有在 A 和 D 之间进行了更改。这些更改不会出现在origin/dev分支上,只会出现在origin/master分支上。