多人协同开发难免会遇到代码冲突的问题,以前遇到冲突,都是手动处理(一行一行查看然后删除不需要的代码。。。好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. VCSGit Resolve Conflicts...

或者在冲突文件上右键 — GitResolve Conflicts...

2. 双击下面的冲突文件

3. 选择需要保留的代码,如果操作有误想回退,可以使用ctrl + zcommand + z分步回退:

4. 因为发生冲突,所以解决冲突后还需要手动commit:

> xxx /d/project/test (master|MERGING)
$ git commit -m '解决冲突'
1+
分类: git
浏览:5,509

0 条评论

发表评论

电子邮件地址不会被公开。

你必须允许浏览器启用JavaScript才能看到验证码

Scroll Up