Git解决冲突

冲突的清情况,发生在两个分支中,都对同一个文件做了修改并提交了,那么在合并的时候,就会出现冲突的情况,下面我们模仿冲入的产生过程,并看看如何处理。
 
当前版本库的情况:
[root@VM-75-64 test]# ll
total 8
-rw-r--r-- 1 root root 78 May 15 16:59 readme.md
-rw-r--r-- 1 root root  7 May 15 11:41 test.txt
[root@VM-75-64 test]# cat readme.md
Git test
Create a new branch is quick
Create a new branch is quick and simple
 
我们创建分支:
 
[root@VM-75-64 test]# git checkout -b Tokyo                #创建Tokyo分支
Switched to a new branch 'Tokyo'
[root@VM-75-64 test]# ll
total 8
-rw-r--r-- 1 root root 78 May 15 16:59 readme.md
-rw-r--r-- 1 root root  7 May 15 11:41 test.txt
[root@VM-75-64 test]# cat readme.md
Git test
Create a new branch is quick
Create a new branch is quick and simple
[root@VM-75-64 test]# vim readme.md
Git test
Create a new branch is quick
Create a new branch is quick and simple
Tokyo deploy                                #添加了一行代码
[root@VM-75-64 test]# git add readme.md
[root@VM-75-64 test]# git commit -m 'branch deploy'        #提交修改
[Tokyo 3e1511e] branch deploy
1 files changed, 1 insertions(+), 0 deletions(-)
 
现在切回master分支:
[root@VM-75-64 test]# git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 7 commits.
[root@VM-75-64 test]# ll
total 8
-rw-r--r-- 1 root root 78 May 15 17:01 readme.md
-rw-r--r-- 1 root root  7 May 15 11:41 test.txt
[root@VM-75-64 test]# cat readme.md                #这里看到master得知的readme还是老样子
Git test
Create a new branch is quick
Create a new branch is quick and simple
[root@VM-75-64 test]# vim readme.md
Git test
Create a new branch is quick
Create a new branch is quick and simple
Master deploy                                    #这里我们也添加了一行代码
[root@VM-75-64 test]# git add readme.md
[root@VM-75-64 test]# git commit -m 'master deploy'    #提交成功
[master c3ab705] master deploy
1 files changed, 1 insertions(+), 0 deletions(-)
 
此时的场景是,master主分支和Tokyo分支都对readme做了修改并提交,那么在合并代码的过程中,就没法使用快速合并,只能试图把各自的修改合并起来,而且会提示你存在冲突,我们看下:
 
[root@VM-75-64 test]# git merge Tokyo
Auto-merging readme.md
CONFLICT (content): Merge conflict in readme.md                    #报错,存在冲突,而且把冲突文件也告诉你了
Automatic merge failed; fix conflicts and then commit the result.
 
我们查看下readme文件:
 
[root@VM-75-64 test]# cat readme.md
Git test
Create a new branch is quick
Create a new branch is quick and simple
<<<<<<< HEAD                                #HEAD表示当前,也即是master的修改情况
Master deploy
=======                                    #分割线
Tokyo deploy
>>>>>>> Tokyo                                #分割线以下,Tokyo以上都是Tokyo分支的修改。
 
好的,此时的readme已经把两个分支的修改情况在文件里描述了出来,就需要人为去编辑一款,既能包含master又能包含Tokyo功能代码的新文件了:
 
[root@VM-75-64 test]# cat readme.md
Git test
Create a new branch is quick
Create a new branch is quick and simple
Ok let us deploy it together                #把原来的标注修改为当前的字段,当然这里只是模拟,真实环境下可不是这么简单的
[root@VM-75-64 test]# git add readme.md
[root@VM-75-64 test]# git commit -m 'final version'
[master 5210a22] final version
[root@VM-75-64 test]# git status
# On branch master
# Your branch is ahead of 'origin/master' by 10 commits.
#
nothing to commit (working directory clean)
 
重新add
重新提交
那么此时的master就是最新版本的代码了!同时之前的冲突也就解决了!
通过git log 我们可以大致看到代码合并的过程:
[root@VM-75-64 test]# git log --graph --pretty=oneline --abbrev-commit
*   5210a22 final version
|\  
| * 3e1511e branch deploy
* | c3ab705 master deploy
|/  
 
代码合并完之后,我们大可删除Tokyo分支了!
[root@VM-75-64 test]# git branch
  Tokyo
  feature1
* master
[root@VM-75-64 test]# git branch -d Tokyo
Deleted branch Tokyo (was 3e1511e).
[root@VM-75-64 test]# git branch -d feature1
Deleted branch feature1 (was d131953).
[root@VM-75-64 test]# git branch
* master
 
这就只剩下master主分支了!
 
总结:
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
git log --graph命令可以看到分支合并图。
 
 以上,共勉!
posted @ 2020-07-31 10:52  一个运维  阅读(566)  评论(0编辑  收藏  举报