目录
- 前置知识
- 1 工具环境
- 2 冲突的产生
- 2.1 仓库中的源代码
- 2.2 人员 A 首先更改代码
- 2.3 人员 B 更改代码,产生冲突
- 2.3.1 第一次错误提示:
- 2.3.2 第二次错误提示:
- 3 查看冲突
- 4 手动解决冲突
- 4.1 方式一
- 4.2 方式二(tortoisegit)
- 5 合并冲突后重新commit
- 6 合并冲突后重新 push
前置知识
远程仓库: 是指存储在远程服务器上的Git仓库,如 github、gitee 中创建的仓库
本地仓库: 是指存储在开发者本地计算机上的Git仓库。开发者可以在本地仓库中进行代码修改,而这些变更只影响到本地仓库。开发者可以将本地仓库中的代码推送(Push)到远程仓库,也可以从远程仓库拉取(Pull)最新的代码到本地仓库。
1 工具环境
git + tortoisegit
2 冲突的产生
举例说明,在当前分支上,有一段代码是这样的
<h2>金融领域情感分析系统</h2>
人员 A 开始开发,将代码修改为如下
<h2>金融领域情感分析系统,第一次更改</h2>
并且将代码 push 到远程仓库
但是在 A 将代码 push 之前,人员 B 就开始开发,将代码修改为如下
<h2>金融领域情感分析系统,第二次更改</h2>
A 人员 push 代码后,B 才开发完,准备提交代码,但由于 A B 都修改了同一行代码,就造成了代码冲突,无法 push 上去
下面 DEMO 记录了冲突产生、寻找、解决的完整流程
2.1 仓库中的源代码
源代码如下:
目前有两个人员 A、B 进行开发任务,基于当前代码 clone 到本地
2.2 人员 A 首先更改代码
A 将代码进行修改,并 push 代码至远程仓库
2.3 人员 B 更改代码,产生冲突
B 人员原本代码如下
为了模拟代码冲突,修改代码如下
然后 B 执行 commit,commit 是不会有错误的,如下图
commit 成功后,进行 push 操作,到这一步就会提示 error,如下图
2.3.1 第一次错误提示:
上图的的红色error,表明:这是由于远程库与本地库代码不一致造成的。说通俗点,就是远程仓库存在一些新代码,你没有拉取 (pull),根据下面的提示也可以知道,我们需要进行 git pull 操作
接下来执行 git pull 命令, git pull 会拉取远程仓库的代码至本地,进行代码合并
2.3.2 第二次错误提示:
如下图,我执行了 git pull,希望将远程仓库的代码拉取同步,一般情况下,远程仓库的代码会自动合并到我的本地,但是!由于 A B 人员修改过同一行代码,必然会造成冲突,。git pull会提示错误:CONFLICT (冲突)
图中有两处信息提示值得我们注意:
- 1 提示:CONFLICT (content): Merge conflict in src/components/myHeader.vue,表示该文件存在冲突
- 2 提示:Automatic merge failed; fix conflicts and then commit the result.,表示需要我们自己手动解决冲突,然后再次进行 commit
说通俗点,就是由于 A B 人员修改过同一行代码,必然会造成冲突,需要我们自己手动解决冲突,也就是,我们手动对代码进行合并,将冲突的代码合并起来,再重新进行 commit push
3 查看冲突
下面我们来看看是哪些具体代码产生了冲突
此时我们打开文件夹,可以看到有冲突的文件会携带一个 黄色的警告标识
我们使用 VScode 打开,可以看到当前代码会使用如下符号,将代码分隔开
<<<<<<<<<HEAD
代码
==========
代码
>>>>>>>>>>
如下图所示:
这些 <<<<< >>>>> 符号表示什么意思?我将这里分为三个重要的部分
- 1 黄色区域:为我们提供了一些快捷的解决冲突方式
-
- 采用当前更改:代码会抛弃人员 A 的更改,仅保留人员 B 的更改,一般不会使用
-
- 采用传入的更改:代码会抛弃人员 B 的更改,仅保留人员 A 的更改,一般不会使用
-
- 保留双方更改:A 和 B 的更改都会被保留下来,一般不会使用
-
- 比较变更:会打开一个界面,我们可以更清晰的看到代码变更
- 2 红色区域:这里是人员 B 修改的代码,即本次提交作者改的代码
- 3 绿色区域:这里是人员 A 修改的代码,即上一次提交作者改的代码
到此,我们就知道了哪里的代码产生了冲突
4 手动解决冲突
接下来,我们要手动,将冲突的代码合并起来
4.1 方式一
方式一是使用编辑器 vscode 进行修改,打开编辑器,如下图
上一节中,已经解释了 <<<<< 和 >>>>>> 分隔代码的含义
假设我们目前希望,A B的代码都保留,即保留所有文案:“第一次更改”和“第二次更改”和“”按钮,我们只需要在编辑器中,将代码合并为我们希望的样子,并删除多余的内容,如下图所示
保存后,然后右键选择文件,点击 resolve,表示将冲突已经解决,文件的黄色警告就会消失
4.2 方式二(tortoisegit)
左上:人员 A 的修改
右上:人员 B 的修改
下面:我们需要手动处理合并,即我们希望怎么保留代码,将代码写在下面
其中,黄色表示该部分代码已被删除,我们要将保留的代码写在红色区域
如果我们希望,将人员A的修改,和人员B的修改都保留,那么可以在下面的区域,将文案“第一次更改”“第二个更改”都添加上,即代码会被合并为这样
保存关闭窗口,右键选择文件,点击 resolve,表示将冲突已经解决,文件的黄色警告就会消失
5 合并冲突后重新commit
到这里,我们已经将冲突合并
我们需要重新进行 commit 和 push操作
此时,message 上自动会有文案如下图
表示当前 commit 的代码合并了冲突
点击 commit ,会出现弹窗,点击 ignore
6 合并冲突后重新 push
执行 git push,代码提交成功
进入 github 仓库中,查看代码,是我们手动合并后的效果
到此代码冲突的问题就解决好了