# 解决冲突
## 文件冲突原因
在进行合并、摘取和变基操作时，不可避免的会遇到更改发生冲突，需要先解决冲突，然后才能继续。  
![](./git_tip_conflict.png)  
产生冲突的原因很简单：  
从同一个节点衍生出两个版本A和B， 在相同的位置，A版本改成某个值，B版本改成另个值，然后把B合并到A上，这时git就会触发冲突，两个版本的优先级是相同的，git不知道该采用哪个值，所以就需要人工干预。  
![](./git_conflict_cause.png)

## 冲突界面介绍
右键TortoiseGit，选择解决冲突，就会弹出冲突列表。  
![](./git_conflict_list.png)  
双击列表中的文件，打开合并窗口。  
![](./git_conflict_merge.png)  
### 文本框
合并窗口有三个文本框：
- 左上角是要导入的版本
- 右上角是当前的版本
- 下方是合并后的版本  
  
要注意的是，只有下方的文本框可以编辑，上面两个都是只读的。  
文本框的左边会有一些小图标，它们代表对应行所做更改的操作类型。  
![](./git_merge_icons.png)
### 工具栏
常用的几个操作：  
- 标记为已解决：在该文档的所有冲突解决完后点击，会在冲突文件列表中删除该文件。
- 上/下一处冲突：快速定位冲突。
- 使用左侧文本块：用于快速采纳更改，下面有个三角，可以选择“使用右侧文本块”。  

## 详细操作
1. 在冲突列表打开冲突文件。
2. 找到下文本框左侧的叹号，该行表示尚未解决的冲突。
3. 然后再看上方两文本框的相同位置。
   - “=”代表该版本的修改前的文本；
   - “+”代表新增或者修改后的文本；
   - “-”代表删除该行；  
4. 然后根据实际情况选择左边或者右边，亦或者两个都不满足，直接在下文本框编辑。
5. 用“上/下一处冲突”切换到下一处冲突编辑。
6. 全部修改完后，点击“标记为已解决”，然后再保存退出。
7. 处理剩下的冲突文件。
8. 测试、提交、推送。