Git冲突分析及解决
一、git pull时冲突
- 解决完冲突以后,原来的一个commit,会变成两个,解决冲突的过程也会被提交为一个commit
1、git pull在commit后执行
1)情景
git branch
# * b_b
# master
git add b.txt
git commit -m 'update b_b a.txt'
git pull origin master # 此时提示冲突
![image-20230517163132700](E:\typra_image\127. Git冲突分析\image-20230517163132700.png)
2)解决
git status
vim a.txt # 打开冲突文件,处理冲突内容, 冲突内容被 <<<<< 和 >>>>>>包裹,前面的是当前分支的变更,后面的是其它分支提交的变更
git add a.txt
git commit -m 'fix conflict'
git push origin b_b # 此时会把所有本地commit给push到远程仓库
2、git pull在commit前执行
1)情景
git branch
# * b_b
# master
git pull origin master # 此时提示冲突
- 根据提示可知,此时pull,远程的变更并没有merge到本地,需要commit后再进行pull
2)解决
git status
# 1. 根据上图提示,先将变更commit
git add a.txt
git commit -m 'b_b update a.txt'
# 2. 再次pull,使其能够merge远程变更到本地,此时会报冲突
git pull origin master
# 3. 解决冲突,参考1.的解决步骤
git status
vim a.txt # 打开冲突文件,处理冲突内容, 冲突内容被 <<<<< 和 >>>>>>包裹,前面的是当前分支的变更,后面的是其它分支提交的变更
git add a.txt
git commit -m 'fix conflict'
git push origin b_b # 此时会把所有本地commit给push到远程仓库
二、Web中merge冲突
1、两个分支都提交merge
1)情景
在两个分支合并前,都没有冲突
合并其中有一个分支,另一个分支的merge request提示有冲突
2)解决
方式一:在web中进行处理
由1)中可见有Resolve conflicts
,可以在web中进行处理冲突
方式二:本地解决冲突
(1)用户没有有master分支push全选
- 将最新的master分支合并到当前分支,处理冲突后push,web中的冲突可以被解决,此时可以继续在web中进行merge
git checkout master
git pull # 更新master分支
git checkout -b b_b origin/b_b # 切换到b_b分支
git pull origin master # 将最新的master分支版本和当前分支合并,此时可能会出现冲突
vim xxx.txt # 解决冲突
git add xxx.txt
git commit -m 'fix conflict'
git push origin b_b
(2)用户有master分支权限
- 将开发分支merge到master分支,解决冲突后push,此时直接就会merge,web中的merge request就会消失
git checkout master
git pull # 更新master分支
git merge b_b # 将开发分支合并到master分支,此时可能会出现冲突
vim xxx.txt # 解决冲突
git add xxx.txt
git commit -m 'fix conflict'
git push origin master
三、本地merge冲突
1)情景
git branch
# * b_b
# master
git add a.txt
git commit -m 'update a.txt by b_b'
git checkout master
git pull # 更新master分支到最新
git merge b_b # 将b_b分支merge到master上,此时可能会有冲突
2)解决
vim a.txt # 解决冲突
git add a.txt
git commit -m 'fix conflict'
git push origin master
博客内容仅供参考,部分参考他人优秀博文,仅供学习使用