首页 > 技术文章 > git中什么时候合并会引发冲突

huangshizhou 2019-01-29 16:43 原文

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces                                                                         
$ mkdir Test/                                                                                                       
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces                                                                         
$ cd Test/                                                                                                          
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test                                                                    
$ git init                                                                                                          
Initialized empty Git repository in D:/workspaces/Test/.git/                                                        
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)

首先进入d盘下的workspaces文件夹下创建Test目录,并且将其初始化。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ vim one.txt                                                                                                       
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ cat one.txt                                                                                                       
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       

然后在Test目录下,创建了one.txt文件,内容如上,然后将其加入缓存区,并且提交到本地库。

 

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ git branch hot_fix                                                                                                
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ git branch-v                                                                                                      
git: 'branch-v' is not a git command. See 'git --help'.                                                             
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ git branch -v                                                                                                     
  hot_fix 0ca2ee0 first commit                                                                                      
* master  0ca2ee0 first commit                                                                                      
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ git checkout hot_fix                                                                                              
Switched to branch 'hot_fix'                                                                                        
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ vim one.txt                                                                                                       
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ cat one.txt                                                                                                       
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff                                                                                                       

创建新的分支 hot_fix 并切换到 hot_fix分支,然后修改one.txt文件,在原来的基础上增加了最后一行的内容。

注意:如果此时加入到缓存区,但没有提交到本地库时切换分支会出现错误,如果没有加入缓存区就切换分支是可以切换成功的,但是如果切换分之后,

再切换后的分支加入缓存区并且提交到本地库,那么文件的修改则会认为是切换后的分支做的。

 

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ cat one.txt                                                                                                       
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff                                                                                                       
ggggggggggggg                                                                                                       
hhhhhhhhhhhh                                                                                                        
iiiiiiiiiiiiii                                                                                                      
jjjjjjjjjjjjj                                                                                                       

在master分支下,one.txt文件的内容如上所示

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ cat one.txt                                                                                                       
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff                                                                                                       
ggggggggggggg                                                                                                       
hhhhhhhhhhhh                                                                                                        
iiiiiiiiiiiiii                                                                                                      

在hot_fix分之下,one.txt文件的内容如上所示

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ git merge master                                                                                                  
Updating 0ef9a92..52dcdab                                                                                           
Fast-forward                                                                                                        
 one.txt | 1 +                                                                                                      
 1 file changed, 1 insertion(+)                                                                                     
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ git status                                                                                                        
On branch hot_fix                                                                                                   
nothing to commit, working tree clean                                                                               
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ cat one.txt                                                                                                       
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff                                                                                                       
ggggggggggggg                                                                                                       
hhhhhhhhhhhh                                                                                                        
iiiiiiiiiiiiii                                                                                                      
jjjjjjjjjjjjj                                                                                                       

在hot_fix分支下,将master分支合并进hot_fix分支,可以看出,合并成功后,执行git status命令,工作树是干净的,也就是说,如果合并成功,那么将不用再执行加入缓存区,

提交到本地库等操作。并且hot_fix分支中one.txt的内容与master分支中的一样。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ vim one.txt                                                                                                       
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ cat one.txt                                                                                                       
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff                                                                                                       
ggggggggggggg                                                                                                       
hhhhhhhhhhhh                                                                                                        

在hot_fix分支下,将one.txt的最后两行删除,然后加入缓存区,提交到本地库。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ cat one.txt                                                                                                       
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff                                                                                                       
ggggggggggggg                                                                                                       
hhhhhhhhhhhh                                                                                                        
iiiiiiiiiiiiii                                                                                                      
jjjjjjjjjjjjj                                                                                                       

在master分支下,one.txt文件中的内容依然未变。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ git merge hot_fix                                                                                                 
Updating 52dcdab..ca43adc                                                                                           
Fast-forward                                                                                                        
 one.txt | 2 --                                                                                                     
 1 file changed, 2 deletions(-)                                                                                     
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ cat one.txt                                                                                                       
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff                                                                                                       
ggggggggggggg                                                                                                       
hhhhhhhhhhhh                                                                                                        

在master分支下,执行合并操作,将hot_fix合并进master分支后,可以看出,master分支像hot_fix一样,one.txt的内容都少了两行。

 

 

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ cat one.txt                                                                                                       
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff                                                                                                       
ggggggggggggg                                                                                                       
hhhhhhhhhhhhiii                                                                                                     

在master分支下,修改one.txt的内容,如上,再最后一行中多填了3个i,然后加入缓存区,提交到本地库。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ cat one.txt                                                                                                       
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff                                                                                                       
ggggggggggggg                                                                                                       
hhhhhhhhhhhh                                                                                                        
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ git merge master                                                                                                  
Updating ca43adc..a0201e4                                                                                           
Fast-forward                                                                                                        
 one.txt | 2 +-                                                                                                     
 1 file changed, 1 insertion(+), 1 deletion(-)                                                                      
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ cat one.txt                                                                                                       
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff                                                                                                       
ggggggggggggg                                                                                                       
hhhhhhhhhhhhiii                                                                                                     

在hot_fix分支下,内容仍然未变,然后合并master分支,发现更改了两行,一行为增,一行为减,git是以行为单位进行修改的,于是在hot_fix分支下,

one.txt先删去了最后一行的内容,再将master分支下新改的一整行加入进去。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ vim one.txt                                                                                                       
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ cat one.txt                                                                                                       
ppppppppppppppppppp                                                                                                 
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff wulawula                                                                                              

在hot_fix 分支下,修改one.txt文件,删除了最后两行,并在第一行插入了多个p字母,并且又在新的最后一行加入了新字符,然后加入缓存区,提交到本地库。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ cat one.txt                                                                                                       
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff                                                                                                       
ggggggggggggg                                                                                                       
hhhhhhhhhhhhiii                                                                                                     
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ git merge hot_fix                                                                                                 
Updating a0201e4..e2bde96                                                                                           
Fast-forward                                                                                                        
 one.txt | 5 ++---                                                                                                  
 1 file changed, 2 insertions(+), 3 deletions(-)                                                                    
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ cat one.txt                                                                                                       
ppppppppppppppppppp                                                                                                 
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff wulawula                                                                                              

切换到master分支,one.txt内容并未改变,然后合并hot_fix分支,是可以合并成功的,并且显示更改了五行内容,其中增加了两行内容,删除了三行内容。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ git diff a0201e4                                                                                                  
diff --git a/one.txt b/one.txt                                                                                      
index c712368..4975dde 100644                                                                                       
--- a/one.txt                                                                                                       
+++ b/one.txt                                                                                                       
@@ -1,8 +1,7 @@                                                                                                     
+ppppppppppppppppppp                                                                                                
 aaaaaaaaaaaaaaaaaaaaa                                                                                              
 bbbbbbbbbbbbbbbbbb                                                                                                 
 ccccccccccccc                                                                                                      
 ddddddddddd                                                                                                        
 eeeeeeeeeeeee                                                                                                      
-fffffffffffff                                                                                                      
-ggggggggggggg                                                                                                      
-hhhhhhhhhhhhiii                                                                                                    
+fffffffffffff wulawula

这就是具体增加的内容和删除的内容,尽管修改了多行,仍然没有发生合并冲突。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ cat one.txt                                                                                                       
ppppppppppppppppppp                                                                                                 
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff wulawula                                                                                              
last                                                                                                                

在master分支下,对one.txt文件进行修改,在最后一行增加了"last‘’,加入缓存区,提交到本地库。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ cat one.txt                                                                                                       
first                                                                                                               
ppppppppppppppppppp                                                                                                 
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff wulawula                                                                                              

在hot_fix分支下,对one.txt文件进行修改,在第一行增加了"first",加入缓存区,提交到本地库。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ git merge master                                                                                                  
Auto-merging one.txt                                                                                                
Merge made by the 'recursive' strategy.                                                                             
 one.txt | 1 +                                                                                                      
 1 file changed, 1 insertion(+)                                                                                     
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                          
$ cat one.txt                                                                                                       
first                                                                                                               
ppppppppppppppppppp                                                                                                 
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff wulawula                                                                                              
last                                                                                                                

然后合并master分支,没有发生冲突。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ cat one.txt                                                                                                       
ppppppppppppppppppp                                                                                                 
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff wulawula                                                                                              
last                                                                                                                
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ git merge hot_fix                                                                                                 
Updating d6c1af4..b8e70d9                                                                                           
Fast-forward                                                                                                        
 one.txt | 1 +                                                                                                      
 1 file changed, 1 insertion(+)                                                                                     
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ cat one.txt                                                                                                       
first                                                                                                               
ppppppppppppppppppp                                                                                                 
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee                                                                                                       
fffffffffffff wulawula                                                                                              
last                                                                                                                

切换master分支,one.txt文件的内容并未改变,然后在master分支下,合并hot_fix分支,发现也能成功,没有发生冲突。

                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ vim one.txt                                                                                                       
                                                                                                                    
86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                           
$ cat one.txt                                                                                                       
ppppppppppppppppppp                                                                                                 
aaaaaaaaaaaaaaaaaaaaa                                                                                               
bbbbbbbbbbbbbbbbbb                                                                                                  
ccccccccccccc                                                                                                       
ddddddddddd                                                                                                         
eeeeeeeeeeeee last                                                                                                  
fffffffffffff wulawula last                                                                                         
last                                                                                                                

在master分支下,修改one.txt文件,在倒数第二行和第三行增加"last",并删除第一行。增加到缓存区,提交到本地库。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                                         
$ cat one.txt                                                                                                                      
first                                                                                                                              
ppppppppppppppppppp first                                                                                                          
aaaaaaaaaaaaaaaaaaaaa fitst                                                                                                        
bbbbbbbbbbbbbbbbbb                                                                                                                 
ccccccccccccc                                                                                                                      
ddddddddddd                                                                                                                        
eeeeeeeeeeeee                                                                                                                      
fffffffffffff wulawula                                                                                              

在hot_Fix分支下,修改one.txt文件,在第二行和第三行增加"first",并删除最后一行。增加到缓存区,提交到本地库。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                                         
$ git merge master                                                                                                                 
Auto-merging one.txt                                                                                                               
CONFLICT (content): Merge conflict in one.txt                                                                                      
Automatic merge failed; fix conflicts and then commit the result.                                                                  

合并master发生冲突。

            

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                                          
$ cat one.txt                                                                                                                      
<<<<<<< HEAD                                                                                                                       
first                                                                                                                              
ppppppppppppppppppp first                                                                                                          
aaaaaaaaaaaaaaaaaaaaa fitst                                                                                                        
bbbbbbbbbbbbbbbbbb                                                                                                                 
ccccccccccccc                                                                                                                      
ddddddddddd                                                                                                                        
eeeeeeeeeeeee                                                                                                                      
fffffffffffff wulawula                                                                                                             
=======                                                                                                                            
ppppppppppppppppppp                                                                                                                
aaaaaaaaaaaaaaaaaaaaa                                                                                                              
bbbbbbbbbbbbbbbbbb                                                                                                                 
ccccccccccccc                                                                                                                      
ddddddddddd                                                                                                                        
eeeeeeeeeeeee last                                                                                                                 
fffffffffffff wulawula last                                                                                                        
last last                                                                                                                          
>>>>>>> master                                                                                                                     

 

在master分支下,修改one.txt文件,在最后一行增加了last。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                                         
$ git merge master                                                                                                                 
Auto-merging one.txt                                                                                                               
Merge made by the 'recursive' strategy.                                                                                            
 one.txt | 2 +-                                                                                                                    
 1 file changed, 1 insertion(+), 1 deletion(-)                                                                                     

合并成功。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (master)                                                                          
$ cat one.txt                                                                                                                      
<<<<<<< HEAD                                                                                                                       
first first                                                                                                                        
ppppppppppppppppppp first                                                                                                          
aaaaaaaaaaaaaaaaaaaaa fitst                                                                                                        
bbbbbbbbbbbbbbbbbb                                                                                                                 
ccccccccccccc  edit by master                                                                                                      
ddddddddddd                                                                                                                        
eeeeeeeeeeeee                                                                                                                      
fffffffffffff wulawula                                                                                                             
=======                                                                                                                            
ppppppppppppppppppp                                                                                                                
aaaaaaaaaaaaaaaaaaaaa                                                                                                              
bbbbbbbbbbbbbbbbbb                                                                                                                 
ccccccccccccc                                                                                                                      
ddddddddddd                                                                                                                        
eeeeeeeeeeeee last                                                                                                                 
fffffffffffff wulawula last                                                                                                        
last last                                                                                                                          
>>>>>>> master                                                                                                                     

在master分支下,修改one.txt文件内容,在有许多c字母的那一行添加了 edit by master。增加到缓存区,提交到本地库。

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                                         
$ cat one.txt                                                                                                                      
<<<<<<< HEAD                                                                                                                       
first first                                                                                                                        
ppppppppppppppppppp first                                                                                                          
aaaaaaaaaaaaaaaaaaaaa fitst                                                                                                        
bbbbbbbbbbbbbbbbbb                                                                                                                 
ccccccccccccc eidt by hot_fix                                                                                                      
ddddddddddd edit by hot_fix                                                                                                        
eeeeeeeeeeeee                                                                                                                      
fffffffffffff wulawula                                                                                                             
=======                                                                                                                            
ppppppppppppppppppp                                                                                                                
aaaaaaaaaaaaaaaaaaaaa                                                                                                              
bbbbbbbbbbbbbbbbbb                                                                                                                 
ccccccccccccc                                                                                                                      
ddddddddddd                                                                                                                        
eeeeeeeeeeeee last                                                                                                                 
fffffffffffff wulawula last                                                                                                        
last last                                                                                                                          
>>>>>>> master                                                                                                                     

在hot_fix分支下,修改one.txt文件内容,在有许多c字母的哪一行添加了 edit by hot_fix 并且在下一行也添加了相同内容。增加到缓存区,提交到本地库。

 

86155@LAPTOP-R32U2085 MINGW64 /d/workspaces/Test (hot_fix)                                                                         
$ git merge master                                                                                                                 
Auto-merging one.txt                                                                                                               
CONFLICT (content): Merge conflict in one.txt                                                                                      
Automatic merge failed; fix conflicts and then commit the result.                                                                  

合并发生冲突。

总结:如果某一个分支在另一分支前面,那么该分支不能合并另一分支,即版本在前面的分支不能合并版本在后的分支。

如果是版本在后的分支,那么可以合并版本在前的分支,并且不管落后几个版本,都能直接合并为版本在前的样子。

如果是一个分支修改好一个版本后,另一个分支也修改好一个版本,那么合并时将会引起冲突,此时解决冲突即可。

其实引起冲突并不可怕,关键是在于能够解决冲突。

 

推荐阅读