下面是一个具体示例:
首先,本地写好了代码,刚git commit 完,working tree is clean ,想要推送到远端,需要先pull下来处理冲突,再push.

执行git pull后发现有几个文件提示Merge conflict in **,说明存在冲突无法自动合并,需要到相应的文件里手动处理冲突

git pull完后立即执行git status,可以发现,蓝色的(master |MERGING),merging表示正在合并的状态,需要手动处理完冲突后再git add和git commit后,merging就会消失,表示合并完成。
同时可以看到提示中Unmerged paths:里有红色字体显示的几个文件,就是需要手动处理冲突的文件

然后开始手动处理冲突,比如第一个extern_variable.cpp,打开后如下

三条线划分了两个部分,就是存在冲突的代码,一个是pull之前本地的代码,一个是远端的代码。
<<<<<<< HEAD
QByteArray port0_data;//串口收到的所有数据,用于保存文件
QByteArray port1_data;//串口收到的所有数据,用于保存文件
QByteArray port2_data;//串口收到的所有数据,用于保存文件
Self_defined_protocol self_defined_protocol[3];//自定义解析协议对象
HexProtocolAnalysis hex_analysis;//十六进制解析对象
QString loadFilePath;=======
Self_defined_protocol self_defined_protocol;//自定义解析协议对象
QString loadFilePath; // 要加载的回放文件路径
QList positionList;int allDataPacket;
>>>>>>> 5284fb4fdbf2bc3c3dc0638a765144013a45b577
如下,根据自己的需求修改好后,同时把那三条提示线给删掉,就处理好了一个文件的冲突
#include "extern_variable.h"QSerialPort com_port0;//串口对象
QSerialPort com_port1;//串口对象
QSerialPort com_port2;//串口对象QByteArray port0_data;//串口收到的所有数据,用于保存文件
QByteArray port1_data;//串口收到的所有数据,用于保存文件
QByteArray port2_data;//串口收到的所有数据,用于保存文件
Self_defined_protocol self_defined_protocol[3];//自定义解析协议对象
HexProtocolAnalysis hex_analysis;//十六进制解析对象
QString loadFilePath; // 要加载的回放文件路径
QList positionList;int allDataPacket;
之后可以git add extern_variable.cpp,再 git status 会发现红色的文件中没有了刚才的extern_variable.cpp,即add后就表示已经合并好了。

同样的,再打开mainwindow.ui处理冲突,由于Qtcreator默认锁定编辑ui文件,可以用notepad++打开进行编辑:

处理完同样可以add 这个文件,也可等其他文件处理完一起add.

最后当所有冲突都处理完后,也add 完后,可以git commit了。commit之后,蓝色的merging标识也没了,就表示合并完成了。

然后这期间如果远端代码没有被其他人更新过的话,就可以git push推送到远端了。
可以看到,因为在本地处理好了冲突,可以很顺利地推送到远端
