前言
GIT
基本上贯穿我们的开发生涯,之所以要使用git也是有很多优点的
🌹🌹🌹🌹🌹🌹🌹🌹
1.通俗易懂点,
保存代码不丢失
:防止因内存,操作等因素导致代码丢失
🌹🌹🌹🌹🌹🌹🌹🌹
2.易于
版本控制
:Git可以帮助你跟踪代码的变化,记录每个版本的变化和差异,方便回退到之前的版本或者查看代码的演进历史
🌹🌹🌹🌹🌹🌹🌹🌹
- 能够
多人协作
:Git支持多人同时对同一个代码库进行协作开发,可以方便地合并不同人的修改或者解决代码冲突。
以及其他方面等等优势,那么这篇文章我重点教大家如何解决GIT冲突
🎈🎈🎈✨✨✨🎈🎈🎈✨✨✨
为什么冲突
GIT冲突大致可以分为三类
- 🎉
并行开发
当多个开发者在
不同
的分支
上同时修改同一个文件
时,如果合并这些分支时存在对同一部分的修改,就会导致冲突。
- ✨
合并分支
当你尝试将一个
分支合并
到另一个分支时,如果这两个分支都修改了同一个文件的相同部分
,Git 无法自动确定应该采用哪个版本的修改,就会产生冲突。
- ⏳
修改历史
如果在 Git 历史中的
不同提交
中对同一文件
的相同部分
进行了修改
,当你试图合并这些修改时,Git 无法确定应该如何组合它们,因此会导致冲突。
那么我们可以很显而易见的知道,造成GIT冲突的最直接的原因为:通过不同的途径
对同一个文件的相同地方
进行修改
了,就会造成GIT冲突
GIT解决冲突
在讲解IDEA进行解决GIT冲突前,先来讲解以下通用的GIT解决冲突的步骤和方式
🧡💛💙💖💝🧡💛💙💚💜🤎🖤🤍💝
以下举例给大家讲解如何解决冲突
步骤
假定有
A分支
和B分支
.我们需要将A分支
的代码合并
到B分支
代码,且修改相同文件的相同代码块,会有git冲突
首先先使用指令确定当前是否为A分支
git branch
如果当前分支不是 A分支
,可以切换到 A分支
分支。使用以下命令切换分支:
git checkout A分支
确保当前分支是最新的,可以使用以下命令拉取最新代码
git pull origin A分支
需要注意的是:要合并代码一定要为最新代码
切换到要合并的分支,也就是B分支
git checkout B分支
将A分支
合并B分支
git merge A分支
因为我们假定一定会出现冲突,因此接下来是解决冲突的步骤🚗
这个时候,GIT会标记我们冲突的代码,假如打开我们的冲突的文件,你会在该文件看到如下示例:
<<<<<<< HEAD
这部分是当前分支的修改
=======
这部分是合并分支的修改
>>>>>>> branch-name
查看冲突部分,并理解每个版本的修改。<<<<<<< HEAD 到 ======= 是当前分支的修改,======= 到 >>>>>>>branch-name 是合并分支的修改。
🌼🌷🌻🥀☘🌱🌺🌲
然后,手动编辑文件,选择你希望
保留的修改
或者组合修改
。你可以删除 <<<<<<< HEAD 到 ======= 之间的内容,或者删除 ======= 到 >>>>>>> branch-name 之间的内容。
这一步,是为了留下你想留下的代码,将代码更新最新
假定冲突文件名为:myfile.txt
,使用如下指令提交解决冲突后的代码
git add myfile.txt
git commit
使用
git add < file>
命令将解决冲突后的文件标记为已解决
。
运行git commit
命令提交
解决冲突的版本。
最后,使用推送指令,将代码推送到远端
git push origin B分支
有可能在你解决完冲突的过程中其他人有新的代码已经推送到远端,因此在推送远端前建议先拉取最新代码,如果很确定不会出现这种情况可不做
以上大功告成,可喜可贺
🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹
IDEA解决冲突
接下来,我将使用一个实例来给大家讲解如何使用idea来更方便的解决冲突
在开始之前,请确保你的电脑安装并配置好了
GIT工具
,具体百度操作即可
步骤
首先,我先建立了一个git仓库
,并基于master主分支,新建了两个分支,分别为A分支
和B分支
以下截图,为了后续演示方便我两个分支名称就叫A分支
和B分支
克隆并打开项目,分别修改A和B分支
以下为讲解
A分支
合并
到B分支
的解决冲突的做法,我们·修改·文件README.md
文件
💛💚💙💚🧡💛💙💜💙💛🧡
从远端克隆下项目
git clone git地址
然后用IDEA打开项目,在右下角可以看到分支
初始我们什么都不做的情况下,
A分支
和B分支
的文件内容是一样的
以修改README.md文件为例,初始内容为:
# search_markdown_data
#### 介绍
用于检索markdown的数据来源
#### 软件架构
软件架构说明
#### 安装教程
1. xxxx
2. xxxx
3. xxxx
#### 使用说明
1. xxxx
2. xxxx
3. xxxx
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
首先点击右下角先切换B分支
选择分支->CheckOut
修改B分支的README.md内容如下:
# search_markdown_data
#### 介绍
用于检索markdown的数据来源
#### 安装教程
1. xxxx 测试修改相同的地方B分支
2. xxxx
3. xxxx
#### 使用说明
1. xxxx
2. xxxx
3. xxxx
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
即
修改内容
安装教程的第一条为1. xxxx 测试修改相同的地方B分支
以及删除
软件架构和软件架构说明字样
然后提交和推送远端
🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼
切换
A分支
,并修改README.md
内容为如下:
# search_markdown_data
#### 介绍
用于检索markdown的数据来源
#### 软件架构
软件架构说明
#### 安装教程
1. xxxx测试修改相同的地方A分支
2. xxxx
3. xxxx
#### 使用说明
1. xxxx
2. xxxx
3. xxxx
4. A分支新增
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
即
修改内容
安装教程的第一条为1. xxxx 测试修改相同的地方A分支
以及新增
4. A分支新增
提交并推送A分支到远端
A分支合并B分支
先切换到B分支
在A分支的选项中选择
merge into current
,意思为把A分支合并到当前切换的分支
此时会进行弹窗
左边为冲突的文件,右边有三个选项,
🌼Accept Yours
:接受当前分支变更
🌸Accept Theirs
: 接受别人的分支的变更
🌻Merge...
: 将两个分支的变更一起查看选择变更
这个根据实际选择不同进行解决冲突,一般情况选择第三个
点击merge
出现如下界面出现了三分界面:
🧡左边屏幕为:当前分支的代码变更
💛右边屏幕为:其他分支的代码变更
💙中间屏幕为:解决冲突之后最终的代码结果
截取左上角的界面
它有如下操作:
🌸
上下箭头
: 切换你要解决冲突的代码块,有的时候解决冲突的代码可能比较长,两处改动的代码块间隔比较多行,可以使用该操作
🌼Left,All,Right
: 点击Lfet,代表把左边的冲突代码块合到中间,Right是把右边的冲突代码合到中间,All是把两边的冲突代码合并到中间.需要注意的是,该操作只能把冲突文件中的不是修改相同的地方的代码进行合并
截取解决冲突的操作界面:
💛
X按钮
:代表不将变动合并到最终的结果
💙》按钮
:代表将分支的变动合并到最终解决之后采用的变更
此外还需要注意的是,它一般有三种变更:
🌻
灰色冲突代码块
:代表的是删除的代码块
🌷红色冲突代码块
:代表的是双方改到相同的地方的代码块,一般情况真实项目中以对同一个功能需要添加两个不同功能居多
🌲蓝色冲突代码块
:代表新增的代码块
灰色和蓝色的冲突块都好解决,直接点击
All
就行,如下为点击All最终执行的结果
只留下修改相同的代码
,至于需要执行什么操作,留下哪个分支的代码,或者两个分支的代码都要,在真实项目中,需要与其他开发者协商
那么这边,我两边的代码块都保留,也就是点击两边的》按钮
:
当所有冲突解决完成之后,会提示:
All changes have bean proccessed. Save Changes and finish merging
的字样,就可以点击Apply
,采用变更了,提一句,Abort
按钮操作是取消合并
然后提交并推送远端,我们的冲突就解决了
大功告成,可喜可贺,撒花~
🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹
结语
以上就是GIT解决冲突的过程啦,这篇文章就到这里