IDEA,VSCode 推送代码到远程仓库;合并代码到不同分支;解决本地和远程的代码冲突

一 、推送代码到远程仓库

在这里插入图片描述

推送结果:
直接Push,会推送远程仓库失败,得到提示 wms: Everything is up-to-date
要先commit再push,才能成功。
在这里插入图片描述

在这里插入图片描述

二、代码合并的两种方式

将一个分支更改的部分推送到另一个分支

方法一: 推荐cherry-pick方式 ,部分合并
例如:dev分支修改了两个实体类后,将修改的结果同步到master分支。但是发布前发现其中一个实体类有bug不能发布到master分支。

转到master分支,用cherry-pick可以选中其中符合的一个实体类同步到master分支,之后push即可

方法二:megre 方式不推荐
例如:将dev分支修改的部分合并到master分支,使用megre就会将dev变动的全部内容都合并到master分支

方式一:
用cherry-pick方式,将master分支改完后的代码推送到test-release分支
切换到test-release分支后要先拉取最新代码,第3步也可以是选中提交记录后右键选择Cherry-pick,
最后Push。
在这里插入图片描述

方式二:
用merge方式,将master分支改完后的代码推送到dev分支(master分支在本地改完后已经推送到了远程)。
1、切换到目标分支dev
2、点击dev, 在本地仓选中master分支,点击Merge’master’ into dev
3、push,将dev合并master的结果推送到远程的dev
在这里插入图片描述

在这里插入图片描述

master分支有蓝色小点,表示远程仓库有人推送新代码,但是本地没有拉取
在这里插入图片描述
怎么将fork仓的dev分支的改动合并到uat分支,并且将改动推送到远程仓的uat分支呢?
项目有三个仓库:公共仓,从公共仓库fork后得到的fork仓库,将fork仓在IDEA克隆得到的本地仓。
1、本地仓在dev分支改完代码,commit到本地
2、fork仓切换dev分支并刷新,在本地仓拉取fork仓的dev分支最新代码,之后本地的dev分支改动推送到远程fork仓的dev分支
3、fork仓切换到uat分支并刷新,在本地仓拉取fork仓的uat分支最新代码(建议本地新克隆一个uat分支仓库,免得切换分支出错)
4、本地切换到目标分支即uat分支,点击右下角uat且右键, 在Local Branches中选中dev分支,点击Merge’dev’ into ‘uat’
5、点击push,将本地uat合并到本地dev的结果推送到远程fork仓的uat分支
6、在fork仓新建Pull Requests, 源分支和目标分支都选择uat分支,提交后等待项目管理员审核,就可以将自己fork仓的uat分支改动的结果推送到公共仓的uat分支了。
注:本地新克隆一个uat分支仓库,如果在Local Branches中没有dev分支,那就在Remote Branches下check out dev就有了
在这里插入图片描述

三、解决代码冲突

情况1∶只要之前本地与远程相同,现在本地没有改变,远程仓库改变了,点击merge后直接pull拉取远程仓库代码,无需代码冲突解决;
拉代码会提示Update Project ,Merge incoming changes into the current branch
合并远程的改变到本地目前的分支。选择Don’t show again后就不会出现这个提示。
在这里插入图片描述

同一个文件,本地改变了没提交到本地仓库,远程该文件没改变,拉取远程代码。该文件在本地是保持改变的样子,不会被没改变的远程影响。

情况2: 本地改变后,远程仓库没有改变,拉取远程仓库无代码冲突。将本地推送到远程也没有代码冲突。

情况3∶多人开发时,相同的多个文件,本地改变了,同时远程仓库也改变了,要解决本地和远程的代码冲突。按照三步走:先绿色小对勾commit,将自己更改的代码提交到本地;再拉取远程仓库代码会弹出Conflicts,点击Merge解决远程和本地的冲突;最后push绿色向上箭头,将解决冲突后得到的代码到远程仓库。

一定要按照三步走来提交代码。
commit到本地之前,建议仔细查看自己更改的部分是否被选中了,要注意commit的文件是不是自己要提交的文件:
在这里插入图片描述

别人更改这些文件后提交到了远程仓库,自己也在本地更改了这些文件,自己commit后,拉远程代码到本地。这些代码就会发生远程和本地的冲突。这就需要小心合远程改变的代码到本地了。

情况3提示弹窗:
在这里插入图片描述

在这里插入图片描述
commit后,拉取远程代码,解决本地和远程冲突:

在这里插入图片描述

情况4:
这个也不算冲突。
文件1自己本地改了,文件2远程别人改了。自己提交文件1,commit后直接push,会提示merge,点击深色按钮后,会将远程改了的文件2保存到本地。
所以推荐3步走提交代码: 先commit提交代码到本地, 再pull拉取远程最新代码, 最后push推送代码到远程。

四、本地新建分支提交到远程仓库

在这里插入图片描述

五、本地拉取远程仓库代码

在这里插入图片描述

六、VSCode拉取,推送,解决代码冲突

6.1 拉取远程仓库项目
在这里插入图片描述

6.2 推送本地项目到远程仓库
在这里插入图片描述

6.3 解决本地和远程仓库的代码冲突
实际开发中,本地改变,远程也改变。
本地改变后,直接点+ stage change,输入描述,点击Commit,最后想push远程仓库,结果发生冲突。
解决方法:
要先拉取远程仓库,结果如下
请添加图片描述
注意:此处写描述没有用,最后推送到码云的动态显示是之前直接推送时写的描述
在这里插入图片描述
冲突解决
请添加图片描述
推送远程
请添加图片描述

七、dev分支多次提交,合并到test分支

提交记录过多,cherry-pick方式要从前往后依次合,不要搞错顺序。建议用方法二, 直接merge 分支。

dev分支多次提交,合并到test分支。
方法一:cherry-pick方式:
切换到test分支。对dev分支从最早的提交记录开始依次合并到最新的提交记录到test分支。

(1)记录1在第2行新增代码,记录2在第3行新增代码。记录1比纪录2先提交到dev分支,但是先 cherry-pick 记录2,就会报冲突。

(2)记录1和记录2依次提交。记录3最后提交,改了第一行代码。直接先cherrypick记录3不报冲突。接着cherrypick 记录2就报冲突。

(3)记录4和记录5依次提交,改的都是同一行代码。先cherrypick记录5报冲突。如果是merge方式就不报冲突。

所以,应该按照时间顺序从前到后依次cherrypick。

方法二:merge 分支
1、本地切换到目标分支test分支,拉取test分支远程的最新代码;
2、再点击本地的 test分支, 在本地仓选中dev分支,点击 Merge ‘dev’ into test;
3、之后push,就可以将 dev 合并 test 的结果推送到远程的test分支仓库。

merge 分支使用的一个场景:
把改的代码从dev 合并到 test,要求提pull request 。如果有冲突就不能自动合并,还得在idea用merge方式,自己把dev改的代码手动解决冲突后从dev合并到test。所以说提pull request ,谁最先提,谁就能少手动解决冲突。建议新加的代码不要写在最后行,写在中间行最好,这样能避免代码冲突。因为如果你和别人在同一个文件都把新加的代码写在了最后行,你比别人提代码晚,并且你没有拉取别人提的最新代码到本地就写了你新加的代码。那么之后等你提代码就会有突出的。

八、总结

总的来说,实际开发中需要,切换到开发分支,先拉取远程开发仓库最新代码到本地开发分支,再进行开发,之后推送到远程开发分支;
切换到测试环境分支,先拉取远程测试仓库最新代码,用cherrypick方式将开发分支改变的部分提交到测试分支,之后将本地测试 分支推送到远程。最容易出现代码冲突的场景是情况3。一般来说实际开发中,多人对多个文件进行修改,情况2这种本地修改后直接推送到远程仓库,没有代码冲突的少见。
提交代码时建议: commit后,拉最新代码,没冲突了就提交push到远程仓库

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值