前提:
1、自己:拉取远程分支A,修改后提交为新分支B;
2、其他同事:修改提交C分支,且比自己先合并进A分支;
现状:A分支有新内容;自己的B分支也有新内容;
需求:把B分支合并进A分支;
若直接把自己的 B分支合并进A分支,有不小可能性会发生冲突;导致A分支发生错误;
解决方法:
1、先更新本地A分支,使本地A分支和远程A分支同步;
2、将自己的修改的B分支,与本地更新后的A分支合并,得到新的B分支;
虽然是把A分支合并进B分支里,但以A分支内容为主,当解决合并冲突时,A文件覆盖B文件;
3、解决合并时产生的冲突
解决冲突后,提交B分支,更新远程B分支;
4、检查合并后的工程是否正常运行:
合并后,A的所有内容完整进入B分支;B分支相对早期A分支有改动的内容,因为冲突覆盖会有内容被修改;故合并后,重新运行项目,解决因冲突导致的bug(参数丢失,场景面板修改,脚本还原等导致不能正常运行);
5、解决B分支Bug后,再提交无误的B分支更新到远程;
6、远程B分支合并进远程A分支;
注:本地AB分支合并后的B分支,相对远程的主分支A,只是在新A分支基础上更前进了一步,
此时B分支合并进A分支,相当于把A直接往前更新,不存在冲突;
具体操作:
第一阶段,本地相关分支合并
1、切换本地A分支(早先拉取到本地的A分支),然后更新本地A分支(同步为最新远程A分支);
$ git branch -a
//查看分支名
$ git checkout A
//根据分支名,切回本地目标A分支(本地有A分支)
$ git checkout -b 本地分支名 origin/远程分支名
//根据分支名,拉取远程A分支到本地(本地无A分支)
$ git pull
//同步到远程进度,为之后合并做准备
(分支切换、更新等具体操作,可查看先前文章:常用Git指令——本地分支相关 )
2、切回B分支(在早先A分支基础上切出来修改的功能分支);
$ git checkout B
//这个是我们做了修改,之后要合并进远程A的分支;
4、把更新后的A分支完整合并进B分支
//此时是在 B分支下
git merge A //将B分支与A分支合并
第二阶段,解决合并冲突
合并后,一般会有冲突,并且会有提示:
“有冲突,合并失败,解决冲突后提交实现B分支与A分支的合并”
此时,可以退出git bush ,改使用TortoiseGit可视化操作;
也可选择使用Bush命令行变基,但我这里使用TortoiseGit更清楚;
(1)选中工程文件夹,右键选择TortoiseGit——解决冲突;
(2)弹出冲突文件列表,依次双击文件,进入文件比较界面;
(3)依次解决每个冲突块:
1)冲突区选择用哪个文件覆盖,作为合并后的文件信息:
选中标记冲突字样后鼠标右键,可选择“使用该文件/该文段”(一般选择A分支文件的文段,同步为远程主分支的修改)
2)解决冲突后,保存,选择标记为 “已解决冲突”;然后关闭界面;
3)继续处理下个有冲突的文件,直到全部冲突文件解决;
(可以看到冲突文件列表的右下角就有提示信息:解决冲突后提交变更;)
第三阶段,解决冲突后,使用TortoiseGit提交更新远程B分支
也可选择使用Bush命令行提交上传;这里仅详细介绍使用TortoiseGit来提交;
(分支更新提交等具体操作,可查看先前文章:常用Git指令——本地分支相关 )
(1)选中项目文件夹,右键选择Git提交->"B功能"分支;
(2)弹出提交界面;会显示之前对冲突文件进行修改的信息;
(3)设置提交信息
勾选设置日期和作者,提交日志信息(规范提交分支),“提交”;
(4)提交时,会出现提示窗口,提示之前合并修改解决冲突文件改变,这里选择“忽略"按钮继续提交;提交完后,并推送到远程;
这时候就冲突解决完,合并完成,并且分支更新到主分支并提交了;
第四部分,检查合并后工程,确认项目无误后,再次提交更新到远程B分支
上面提交后,远程B分支就可以直接合并到远程A分支里的,但因之前解决冲突修改覆盖一些项目文件,可能项目存在Bug,得进行下面检查功能操作;
打开本地分支,看看合并后,功能能否正常运行,有问题就修改,再提交没有问题的功能分支;
(因为B分支功能是自己写的,比较清楚脚本逻辑,方便修改,所以上面合并冲突时,都是选择A文件覆盖B文件)
第五部分,远程A分支和B分支合并
GitLab/Gitee/GitHub等远程控制平台上,管理员把远程B分支合并进A分支里;
仅需要直接操作的步骤过程,可看我另篇文章: