分支说明
这个冲突涉及到了GitLab远程上的dev
、dev_fangju
分支,分支说明如下:
dev
分支为项目开发分支dev_fangju
分支为我之前从dev
分支上克隆的分支,这个分支属于我的个人开发分支
我每次先在自己的本地开发分支dev_fangju
上面编写代码,然后将代码提交push
到远程的dev_fangju
分支,之后在远程merge request
将dev_fangju
分支上的代码合并到dev
分支上,等待别人审核。因为dev
分支为整个团队一起开发的分支,在我克隆dev
分支的代码至dev_fangju
分支上之后我就没有从dev
分支上pull
代码了,所以一般情况dev
分支的HEAD
结点在我的分支dev_fangju
之前很多。
问题描述
今天在申请合并代码的时候,我的dev_fangju
分支与dev
分支上冲突了。原因是因为我的分支和远程dev
分支是不同步的,其他人在远程上提交了新的代码,正好我的代码与他的代码发生了冲突。
解决方法
因为我写的代码需要提交给别人审核,所以我是通过以下方式解决的
1.切换到本地的dev
分支
git checkout dev
2.拉取同步远程dev
分支的代码
git pull
3.从本地的dev
分支上再引出一个dev_fangju_new
分支
git checkout -b dev_fangju_new
4.合并本地dev_fangju
的代码至dev_fangju_new
git merge --no-ff dev_fangju
这里将会产生冲突,直接点击Android Studio中的Version Control中的local changes解决冲突即可,冲突文件的界面如下:
左边当前分支dev_fangju_new
的代码,右边为待合并分支dev_fangju
的代码,中间为冲突之后的代码,这里可以按照这个提示自己去合并,最终将保留中间部分的代码
5.提交dev_fangju_new
分支的代码
git commit -a -m "fix conflict:last commit description"
6.推送dev_fangju_new
分支的代码至远程,并在远程创建新分支dev_fangju_new
git push origin dev_fangju_new
7.在远程申请合并
这里会发现现在没有冲突了,正常合并即可。但是远程多了一个新分支
步骤后面可选
8.删除本地和远程老分支dev_fangju
git branch -d dev_fangju #删除分支分支
git push origin :dev_fangju #删除远程分支
9.修改远程分支dev_fangju_new
的名称为之前的分支名称dev_fangju
git branch -m dev_fangju_new dev_fangju #修改本地分支名称
git push origin :dev_fangju_new #删除远程分支
git push --set-upstream origin dev_fangju #新增远程分支
10.同步远程dev
分支的最新代码至本地的dev
分支
git checkout dev
git pull
第二种思路
假如我写的代码不需要提交给别人审核,那么我其实可以不用那么麻烦,思路如下:
1.切换到本地dev
分支,拉取远程dev
分支的最新代码
git checkout dev
git pull
2.合并本地dev_fangju
分支的代码至dev
分支
git merge --no-ff dev_fangju
3.解决冲突,提交冲突后的代码
git commit -a -m "new commit description"
4.推送最新的代码至远程dev
分支
git push
附录
之前我也遇到了这个问题,之前的解决办法是
1.将远程dev
分支的最新代码拉取到本地
git checkout dev
git pull
2.在本地的dev_fangju
上合并dev
分支的代码
git checkout dev_fangju
git merge --no-ff dev
3.解决冲突,提交代码
git commit -a -m "new commit description"
但是这种方式就有一个问题,在我最后一次和远程dev
分支提交的交叉处,因为远程的dev
分支一直在开发中,别人也提交了很多代码,我在拉起远程dev
分支代码的时候把别人之前提交过的代码也拉取过来了,那么我的现在的分支上就会多了很多别人的提交记录,我在把我的代码push
到远程的时候就会看到很多别人的提交。一般来说,我只需要提交自己修改的代码即可,但是这种方式的话就把别人的代码给拉取过来了。因为都是远程dev
上的代码,所以中途没人再次提交的话也不会产生什么问题。
4.推送代码至远程
git push
5.申请合并dev_fangju
分支的代码至dev
分支即可