多人协同开发难免会遇到代码冲突的问题,以前遇到冲突,都是手动处理(一行一行查看然后删除不需要的代码。。。好low啊)。昨天再次遇到冲突,使用VS Code编辑器的同事问我:“WebStorm没有解决冲突的功能吗? ” ,我才想起来还真的都没有去探索过(很惭愧)。后面经过研究,发现作为前端开发利器的WebStorm还是拥有这一实用功能的,下面通过一个例子模拟开发中的冲突场景,然后使用WebStorm编辑器的“Resolve Conflects”功能解决它!
产品提了一个需求(简称:
场景demand
),需要你和李四两个人共同开发,修改同一个文件。那么,你们俩都会在各自的电脑中(从master上)新建一个该需求的本地分支,你的分支名叫demand/me
,李四的分支名叫demand/lisi
。并约定各自开发完成后都合并到master主分支上,李四在你之前完成,将代码合并到了master,等你要执行合并的时候,冲突便发生了(因为毕竟操作的是同一个文件)。这个时候就会用到“Resolve Conflects”功能,至于有冲突的那部分最终采取谁的代码,就看情况了(谁对用谁的)。
一、模拟操作流程
两个人的操作都在本地模拟,按照以下步骤执行:
在D:/project/新建文件夹,命名为test
(项目目录),启动WebStorm,打开该文件夹,点击底部的Terminal,输入git init
,该项目即可被git管理:
> xxx /d/project/test
$ git init
test
下新建index.js
(你和李四都要修改的文件),输入以下内容:
let init = '这是一些初始化内容'
提交到master:
> xxx /d/project/test (master)
$ git add ./
$ git commit -m '初始化'
模拟两个人在本地新建分支的操作,先帮李四创建:
> xxx /d/project/test (master)
$ git checkout -b demand/lisi
再回到master,接着帮你自己创建:
> xxx /d/project/test (demand/lisi)
$ git checkout master
> xxx /d/project/test (master)
$ git checkout -b demand/me
现在,你们俩的分支都建好了。回到李四的分支,让他开始开发代码:
> xxx /d/project/test (demand/me)
$ git checkout demand/lisi
他修改index.js
,新增一条语句(第二行):
let init = '这是一些初始化内容'
let lisi = '再忙也要好好吃饭'
李四代码写完了,执行提交,然后切换到master分支,merge他的代码:
> xxx /d/project/test (demand/lisi)
$ git add ./
$ git commit -m '李四说再忙也要好好吃饭'
$ git checkout master
> xxx /d/project/test (master)
$ git merge demand/lisi
至此,李四完成了代码合并。
接下来,模拟你的操作,首先切换到你的分支,此时你会发现index.js刷新了一下,恢复到了只有一行(let init = '这是一些初始化内容'
)的原始版本:
> xxx /d/project/test (master)
$ git checkout demand/me
你修改index.js
,新增一条语句(第二行):
let init = '这是一些初始化内容'
let me = '加班熬夜记得多吃水果'
你的代码也写完了,执行提交,然后切换到master分支,merge你的代码:
> xxx /d/project/test (demand/me)
$ git add ./
$ git commit -m '我说加班熬夜记得多吃水果'
$ git checkout master
> xxx /d/project/test (master)
$ git merge demand/me
此时,冲突产生啦!
> xxx /d/project/test (master)
$ git merge demand/me
Auto-merging index.js
CONFLICT (content): Merge conflict in index.js
Automatic merge failed; fix conflicts and then commit the result.
> xxx /d/project/test (master|MERGING)
代码上也出现了冲突的标记:
二、解决办法
1. VCS
— Git
— Resolve Conflicts...
或者在冲突文件上右键 — Git
— Resolve Conflicts...
2. 双击下面的冲突文件
3. 选择需要保留的代码,如果操作有误想回退,可以使用ctrl + z
或command + z
分步回退:
4. 因为发生冲突,所以解决冲突后还需要手动commit:
> xxx /d/project/test (master|MERGING)
$ git commit -m '解决冲突'
0 条评论