在使用git merge时,可能是以下三种模式中的某一种" P5 s1 c. R9 l! m- @2 s
3 t( _6 v$ W6 J4 g) d, G" u+ n, u# L, u; y8 B, Y
1.Fast forward9 u4 Q: X& N8 g1 n4 Q8 e4 L2 G
当待合并的2个branch最近的commit是线性关系时# X, e' j; u0 _% L! Y: Q
或者说,某个branch自上次更新后没有commit信息时
{. C# w% ?6 T$ B; r7 S& F( i git则直接移动指针即可,并没有真正的merge操作,也没有对应的merge commit信息# s) h3 z \% B: z! e
如下图,合并master和hotfix分支,既是fast-forward模式/ r2 D2 I3 F' `5 ^: M, T
0 |6 X. R# C. L" C$ }: N- Z! _. i% f1 a) e. u( g/ b
2.Merge made by recursive% u3 M4 O4 Y$ A
当要合并的2个branch的最近的commit对应的直接祖先不同时& g! E9 B' }. T* v
git就无法通过简单的移动指针来进行合并: V9 G/ O$ ?/ H, O+ G
只能以2个branch的最新commit和他们的共同祖先进行一次merge
% Q% X6 M1 T( X1 z9 Q 并对应有一个merge commit信息$ z5 d/ z9 ^0 D5 H7 k y( w* g
如下图,合并master和iss53分支:4 G9 p8 F, @/ r
2 |0 S( l/ n+ {' ~- g
: K( r6 a6 ?' D1 F7 S9 S6 C3.Conflict
, r6 c- f7 ^. f' u 当2个branch都修改了同一个文件的同一部分时, s' N8 s! p$ q
这时,就会发生冲突,git的自动合并就会失败 j7 C8 l0 ]9 g) u9 r* Q! y
这时,使用git status会看到+ D! n4 u, i z+ c
) c* V" c" a2 H/ d& c8 T, wtest.html: needs merge
0 q- } M" e, n a! o- M" [5 f6 D$ y0 l& P, A, v7 b/ X; M2 L
+ Z; @+ i @8 w7 A
需要手工合并冲突后,git add一下,表明冲突修改完了7 Z& O- M7 S$ e4 F$ a
然后,再git commit即可
/ R, |4 f0 c. R+ y e. G* k; L7 ^.